Ich habe eine Tabelle:Wie selbst JOIN rekursiv in SQL?
Series ======== ID SeriesName ParentSeriesID
Eine Reihe kann eine „root“ -Serie sein, (ParentSeriesID
0 oder null) oder es kann einen Elternteil hat. Eine Reihe kann auch mehrere Ebenen nach unten sein, d. H. Ihr Elternteil hat ein Elternteil, das ein Elternteil usw. hat.
Wie kann ich die Tabelle abfragen, um eine Serie nach ihrer ID und allen Nachkommen zu erhalten?
Bisher habe ich versucht:
SELECT child.*
FROM Series parent JOIN Series child ON child.ParentSeriesID = parent.ID
WHERE parent.ID = @ParentID
Aber das gibt nur die erste Ebene der Kinder, ich den übergeordneten Knoten werden soll, und alle „downstream“ Knoten. Ich bin mir nicht sicher, wie ich von hier fortschreiten soll.
Ich habe Ihre Abfrage geändert, um es zum Laufen zu bringen, setzen Sie es in meine Bearbeitung zu Ihrer Frage. Danke für Ihre Hilfe! –
Jede Möglichkeit, dies auf einer nicht ms SQL Server DB zu tun? Ich brauche einen Standardweg ohne CTE zu benutzen. –
@goku_da_master - Kommt drauf an, was du meinst. Derselbe Code sollte für Postgres, Oracle und DB2 funktionieren. Gemeinsame Tabellenausdrücke sind Teil der SQL-Spezifikation und werden daher von mehreren Anbietern implementiert. Es klingt jedoch so, als würden Sie fragen, wie Sie dasselbe in einer Datenbank erreichen können, die CTEs wie MySQL oder MS Access nicht unterstützt. Die Antwort hängt vom Produkt ab. – Thomas