MySQL 4.0.18
Dengue
- datenbank
Hallo,
leider bin ich gezwungen mit einer MySQL-Version < 4.1 zu arbeiten. Deshalb sind die nützlichen Unterabfragen (z.B. in Where-Klauseln) nicht möglich. Man kann zwar Abfragen wie IN oder NOT IN durch JOINS ersetzen, aber ich habe hier eine komplexere Where-Klausel, bei der ich das nicht schaffe:
SELECT *
FROM System AS sys
JOIN System_Standort AS sysSta ON(sys.System_Standort_ID = sysSta.ID)
WHERE
sys.ID NOT IN(SELECT Partner_ID FROM Konfiguration)
OR
(sys.ID IN(SELECT Partner_ID FROM Konfiguration) AND (sysSta.Standort_Dienststelle_ID = 0 OR sysSta.Standort_Dienststelle_ID IS NULL))
Hat jemand dazu eine Idee?
MfG
Dengue
Hello,
sys.ID NOT IN(SELECT Partner_ID FROM Konfiguration)
OR
(sys.ID IN(SELECT Partner_ID FROM Konfiguration) AND (sysSta.Standort_Dienststelle_ID = 0 OR sysSta.Standort_Dienststelle_ID IS NULL))[/code]
verwende zunächst einen LEFT JOIN (solltest du noch nicht mit mehreren Tabellen gearbeitet haben, siehe Fortgeschrittene Jointechniken). um zusätzlich in die Konfigurationstabelle zu joinen. Der LEFT JOIN ermöglicht dir hinterher zu schauen, ob du tatsächlich einen Treffer in der Konfigurationstabelle hast oder nicht, und zwar erkennst du dies daran, dass die entsprechenden Felder NULL sind.
Dementsprechend kannst du deine WHERE-Klausel nun anpassen:
konf.Partner_ID IS NULL -- entspricht nach dem Join dem ersten Teil deiner Klausel
OR
(konf.Partner_ID IS NOT NULL AND ...)
sys
MfG
Rouven
konf.Partner_ID IS NULL -- entspricht nach dem Join dem ersten Teil deiner Klausel
OR
(konf.Partner_ID IS NOT NULL AND ...)
Vielen Dank. An die Sache mit dem IS NOT NULL habe ich gar nicht gedacht ;-) Bin halt noch müde.
MfG
Dengue
yo,
ganz so trivial ist es leider nicht, einfach JOINS daraus zu machen und auf null werte zu achten. durch JOINS kann sich die anzahl der datensätze verändern, die man in der ergebnismenge zurück bekommt. unterabfragen in der WHERE klausel grenzen weiter ein, verändern aber die anzahl der datensätze nicht. mit einem JOIN einzuschränken kann aber sehr wohl diese anzahl verändern, kommt immer auf den kokreten fall drauf an.
des weiteren vermute ich ein logik-fehler in deiner abfrage, bedenke das AND stärker als das OR bindet, explizit bei dir in der zweiten unterabfrage.
Ilja