Ich brauche ein bisschen Hilfe beim Erstellen einer Abfrage, die mich die folgenden Daten filtern lassen wird.Herausfiltern von Kindern in einer Tabelle mit Parent-ID
Table: MyTree
Id ParentId Visible
=====================
1 null 0
2 1 1
3 2 1
4 3 1
5 null 1
6 5 1
Ich erwarte, dass das folgende Ergebnis aus der Abfrage:
Id ParentId Visible
=====================
5 null 1
6 5 1
Das heißt, alle Kinder des verborgenen Knoten sollen nicht zurückgegeben werden. Darüber hinaus ist die Tiefe einer Hierarchie nicht begrenzt. Jetzt antworte nicht "Just Set 2, 3 & 4 zu sichtbar = 0" aus nicht offensichtlichen Gründen, die nicht möglich ist ... Wie ich ein schreckliches "Legacy-System" repariere.
Ich dachte an so etwas wie:
SELECT *
FROM MyTree m1
JOIN MyTree m2 ON m1.ParentId = m2.Id
WHERE m1.Visible = 1
AND (m1.ParentId IS NULL OR m2.Id IS NOT NULL)
Sorry für den syntaktischen Fehler
Aber das wird nur die erste Stufe filtert, nicht wahr? Hoffe du kannst helfen.
Bearbeiten: Beendet den Titel, hoppla. Der Server ist ein brandneuer MSSQL 2008-Server, aber die Datenbank wird im Kompatibilitätsmodus 2000 ausgeführt.
Welche Version von SQL Server? –
@JohannesH - Ich bin mir nicht sicher, ob ich verstehe, was Sie erreichen wollen. –
Die Antwort, die ich denke, hängt ziemlich stark davon ab, ob Sie in SQL Server 2005+ (die rekursive CTEs tun können) oder SQL Server 2000- (die nicht möglich) – AakashM