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.