Nils Hitze
Admin a.D.
Hi Folks,
ich muss eine Applikation die ursprünglich mal auf ORACLE basiert hat in PHP auf eine MySQL DB umschreiben. (Version 4.0.20-log)
Mein Problem ist eine ellenlange Abfrage über mehrere Tabellen
die 2 SUBSELECT's beinhaltet die in etwa so aussehen :
In Mysql wird leider WHERE a IN (SELECT * FROM b) nicht unterstützt
und ich muss also meine Abfrage auf JOINS ändern.
Leider bin ich in SQL im allgemeinen kein großer Held, also wäre
ein bisschen Schützenhilfe super.
Die originale Abfrage :
Meine Abfrage (die nicht funktioniert, bzw. extrem langsam ist) :
Danke im Vorraus,
Nils
P.S. Die Originalabfrage stammt nicht aus meiner Feder, also bitte nicht lachen.
ich muss eine Applikation die ursprünglich mal auf ORACLE basiert hat in PHP auf eine MySQL DB umschreiben. (Version 4.0.20-log)
Mein Problem ist eine ellenlange Abfrage über mehrere Tabellen
die 2 SUBSELECT's beinhaltet die in etwa so aussehen :
Code:
SELECT max(artikel.id), max(artikel.beschreibung) ... FROM artikel WHERE artikel.id IN (SELECT * FROM ... ) ORDER BY artikel.id
In Mysql wird leider WHERE a IN (SELECT * FROM b) nicht unterstützt
und ich muss also meine Abfrage auf JOINS ändern.
Leider bin ich in SQL im allgemeinen kein großer Held, also wäre
ein bisschen Schützenhilfe super.
Die originale Abfrage :
Code:
select max(artikel.id), max(artikel_art.id), max(artikel.art), max(beschreibung), max(concat(to_char(ersteinsatzbeginn,'YYYY'),concat(' ',ersteinsatz)))
from artikel,lieferanten,artikel_baureihe,artikel_thema,artikel_art
where lieferant_id=lieferanten.id(+)
and artikel.id=artikel_baureihe.artikel_id(+)
and artikel.id=artikel_thema.artikel_id(+)
and artikel.sprache='de'
and artikel_art.sprache='de'
and artikel.art=artikel_art.name
and art like "Exponat"
and (upper(beschreibung) like '%Motor%'
or upper(concat(to_char(ersteinsatzbeginn,'yyyy'),concat(' ',ersteinsatz))) like '%Motor%'
or artikel.id in (select artikel_id from reservierungen where upper(concat(to_char(reservierungsanfang,'yyyy'),concat(' ',ort))) like '%Motor%' group by artikel_id)
or artikel.id in (select artikel_id from einsaetze where upper(concat(to_char(begin,'yyyy'),concat(' ',einsatzort))) like '%Motor%' group by artikel_id))
group by artikel.id,beschreibung,artikel.art
order by artikel.art,beschreibung
Meine Abfrage (die nicht funktioniert, bzw. extrem langsam ist) :
Code:
SELECT max(artikel.id), max(artikel_art.id), max(artikel.art), max(artikel.beschreibung), max(concat(artikel.ersteinsatzbeginn,concat(" ",artikel.ersteinsatz)))
FROM artikel,lieferanten,artikel_baureihe,artikel_thema,artikel_art,reservierungen,einsaetze
WHERE artikel.lieferant_id=lieferanten.id
AND artikel.id=artikel_baureihe.artikel_id
AND artikel.id=artikel_thema.artikel_id
AND artikel.sprache="de"
AND artikel_art.sprache = "de"
AND artikel.art=artikel_art.name
AND artikel.art LIKE "Exponat"
AND (upper(artikel.beschreibung) LIKE "%MOTOR%")
OR upper(concat(artikel.ersteinsatzbeginn, concat(" ",artikel.ersteinsatz))) LIKE "%MOTOR%"
OR (artikel.id = reservierungen.artikel_id
AND (upper( concat( einsaetze.begin, concat( " ", einsaetze.einsatzort ))) LIKE "%MOTOR%"))
OR (artikel.id = einsaetze.artikel_id
AND (upper( concat( reservierungen.reservierungsanfang, concat( " ", reservierungen.ort))) LIKE "%MOTOR%"))
GROUP BY artikel.id,artikel.beschreibung,artikel.art
ORDER BY artikel.art,artikel.beschreibung
Danke im Vorraus,
Nils
P.S. Die Originalabfrage stammt nicht aus meiner Feder, also bitte nicht lachen.