SQL: Unterste Ebene filtern

DrMueller

Erfahrenes Mitglied
Hallo,
folgendes Problem: Ich soll über einen SQL-Befehl nur die untersten Datensätze rausgeben, z.B.:
1
1.1
1.1.1

etc. nur 1.1.1 rausgeben.
In der Tabelle sind jedoch nur die Parents gespeichert, also keine Childs.
Nun bin ich nicht so der SQL-Hengst, aber ich habe folgende Abfrage getestet:

SELECT sig
FROM pavDokRegPlan
WHERE (sig NOT IN
(SELECT parent
FROM pavDokRegPlan AS pavDokRegPlan_1))

Sig ist die ID, parent entsprechend die ID des oberhergehenden Datensatzes.
Leider scheint bei mir in dieser Abfrage nie ein Resulutat.

Interessanterweise erscheinen jedoch, wenn ich Not in mit In ersetze, die Datensätze, welche ein Child haben, die Umkehrung würde also klappen.

Hat jemand eine Idee, wieso das not in nicht funktioniert?


Ich bedanke mich im Voraus.
 
Left Join sollte gehen. Also irgendwie etwa so:
Code:
SELECT P.sig
FROM pavDokRegPlan P
LEFT JOIN pavDokRegPlan C ON C.parent= P.sig
WHERE C.parent IS NULL;

Ich nehme dabei die Tabelle 2 mal und verknüpfe sie als Parent-Table(p) mit Child-Table(c):
p.sig=c.parent

Jeder Parent-Eintrag (p) der kein Cild (c) hat steht also in der untersten Stuffe.
c.parent IS NULL
 
Hm das ist genial, klappt wirklich.
Muss mal die Logik dahinter verstehen, aber da muss ich einfach mal analysieren.
Also abgeschlosse, danke.
 
Zurück