Daniel Petratsch: MySQL "EXISTS" Alternative

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

--
Das ist der ganze Jammer, die Dummen sind immer so sicher und die Gescheiten so voller Zweifel.
[Bertrand Russell]
  1. 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