Joah.: Mysql und Outer Join

Hallo,

ich habe zwei Tabellen, vereinfach wie folgt:

Personen: personenID, Name
Notizen: personenID, Notiz

Dies ist eine starke Vereinfachung. Ich möchte jetzt alle Personen aufgelistet haben, die in der 2. Tabelle Notizen KEINEN Eintrag haben, sollte doch über einen OUTER JOIN funktionieren, oder?

Bitte keine Vorschläge, wie die Tabellen umgemodelt werden können, dies ist nicht möglich, wie gesagt -> starke Vereinfachung.

Gibt es in MySQL überhaupt einen OUTER JOIN?

Danke für eure Hilfe.

Joah.

  1. Hi,

    Ich möchte jetzt alle Personen aufgelistet haben, die in der 2. Tabelle Notizen KEINEN Eintrag haben, sollte doch über einen OUTER JOIN funktionieren, oder?

    ja, zusammen mit der Prüfung auf NULL-Werte.

    Bitte keine Vorschläge, wie die Tabellen umgemodelt werden können,

    Wieso? Eine 0/1:1-Beziehung ist doch absolut in Ordnung.

    Gibt es in MySQL überhaupt einen OUTER JOIN?

    Wonach hast Du in der Doku gesucht?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hi Joah,

    Personen: personenID, Name
    Notizen: personenID, Notiz

    select Name from Personen where personenID in (select personenID from Personen minus select personenID from Notizen);

    Durch das minus in der inneren Abfrage "ziehst" Du die Menge der personenIDs aus der Notizen-Tabelle von der Menge der personenIDs in der Personen-Tabelle ab. Die Ergebnis-Menge zeigt alle personenID's bei der die Personen keine Notizen haben.

    Gruß

    Hans

    1. yo,

      zum einen geht das über einen OUTER JOIN mit NULL Prüfung besser, wie Chetah bereits geschrieben hat.

      select Name from Personen where personenID in (select personenID from Personen minus select personenID from Notizen);

      zum anderen läßt sich dein weg über eine unterabfrage auch noch vereinfachen.

      SELECT ...
      FROM personen
      WHERE personenID NOT IN (SELECT DISTINCT personenID FROM notizen)

      Ilja