Einzelnen Beitrag anzeigen
Alt 16.10.2008, 12:16  
stefanjann
Erfahrener Benutzer
 
Benutzerbild von stefanjann
 
Registriert seit: 02.08.2005
Beiträge: 252
PHP-Kenntnisse:
Fortgeschritten
stefanjann
Standard [Erledigt] Left join und inner join

Hallo,

ich habe drei Tabellen

person: ident, name
kategorie: ident, kat
personzukat: zuperson, zukat

Ich habe eine Suche geschrieben, die mit alle Personen gibt, die eine Kategroie haben die das Wort "eins" enthalten.

Code:
SELECT *
  FROM person p
  INNER JOIN personzukat z
    ON z.zuperson=p.ident
  INNER JOIN kategorie k
    ON k.ident=z.zukat
  WHERE LOWER(k.kat) LIKE '%eins%';
Das geht.
Jetzt brauche ich noch die Überprüfung, dass er nur Leute anzeigen soll, die keine Kategorie haben, die "zwei" in einer Kategroei stehen haben. Mein Versuch war folgt:
Code:
SELECT *
  FROM person p
  INNER JOIN personzukat z1
    ON z1.zuperson=p.ident
  INNER JOIN kategorie k1
    ON k1.ident=z1.zukat
  LEFT JOIN personzukat z2
    ON z2.zuperson=p.ident
  LEFT JOIN kategorie k2
    ON (k2.ident=z2.zukat) AND (k2.kat LIKE '%zwei%')
  WHERE (
      (LOWER(k2.kat) LIKE '%eins%')
    AND ((k2.kat NOT LIKE '%zwei%') OR ISNULL(k2.ident))
    )
Komischerweise ist die Tabelle k2 immer NULL.
Wenn ich die Tabellen z2 und k2 mit INNER JOIN verknüpfe (und den Teil in der WHERE weglasse) erlange ich treffer. Also müsste doch bei LEFT JOIN auch ein Treffer kommen, oder?
Wo liegt mein Denkfehler?

Danke schon mal.
__________________
SELECT * benutze ich nur um den Post kurz zu halten.
stefanjann ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten