MySQL "EXISTS" Alternative
Daniel Petratsch
- datenbank
Hallo!
Ich möchte gerne Über eine MySQL Abfrage prüfen, ob in anderen Tabellen bestimmte Datensätze existieren, und habe herausgefunden, dass es prima mit einem Subselect und "EXISTS" bzw "NOT EXISTS" funktionieren würde, zb so
SELECT T.id,T.tiername FROM TIERE AS T WHERE NOT EXISTS(SELECT E.feahigkeit,E.id FROM Eigenschaften AS E WHERE T.id = E.id)
Sollte mir zb genau die id und den Tiernamen liefern, zu dem Tier noch keine Eigenschaft gespeichert wurde.Das funktioniert aber erst ab der 4er MySQL Version, und ich habe auch keine Ahnung welche Alternativen ich verwenden kann, da ich mich mit den hunderten verschiedenen Joins die es so gibt nicht sonderlich auskenne. Probiert habe ich es auch noch mit "IN", geht aber auch nicht. Vielleicht weiss ja wer von euch eine Lösung, die in meiner uralten Version 3.23 auch noch funktioniert :)
freundliche Grüsse,
Daniel
Halihallo Daniel
SELECT T.id,T.tiername FROM TIERE AS T WHERE NOT EXISTS(SELECT E.feahigkeit,E.id FROM Eigenschaften AS E WHERE T.id = E.id)
SELECT
T.id
FROM
Tiere AS T
LEFT OUTER JOIN Eigenschaften AS E ON (T.id=E.id)
WHERE ISNULL(E.id)
Sowas in der Art sollte möglich sein. Zuerst bildet man den OUTER
JOIN zu Eigenschaften, sodass alle Tupel aus "Tiere", die kein
entsprechenden Eintrag aus Eigenschaften haben, als "Eigenschafts-
Attribute" den Wert NULL bekommen; und genau auf diesen kannst du im
WHERE-Clause prüfen. Falls er NULL ist, hast du dein
eigenschaftenloses Tier gefunden :-)
Musst eben mal ausprobieren, aber so in etwa sollte es möglich sein.
Viele Grüsse
Philipp