ehemalige ORACLE Abfrage ändern

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 :

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.
 
Zurück