Heim >Datenbank >MySQL-Tutorial >Wie können rekursive Self-Joins in SQL Server hierarchische Daten effizient abrufen?
Das Navigieren in hierarchischen Datenstrukturen kann komplex sein. Der rekursive allgemeine Tabellenausdruck (CTE) von SQL Server bietet eine leistungsstarke Lösung zum Durchlaufen dieser baumartigen Strukturen mithilfe von Selbstverknüpfungen.
Stellen Sie sich ein typisches hierarchisches Datenmodell vor, beispielsweise eine Kategorietabelle:
<code class="language-sql">CREATE TABLE Categories ( Id int PRIMARY KEY, Name nvarchar(MAX), ParentId int FOREIGN KEY REFERENCES Categories(Id) );</code>
Dieses Design ermöglicht verschachtelte Kategorien beliebiger Tiefe. Die Visualisierung dieser Hierarchie (wie unten gezeigt) verdeutlicht die Schwierigkeit, vollständige Abstammungslinien mit Standard-SQL-Abfragen abzurufen.
[Bild der Kategoriehierarchie einfügen]
Ein rekursiver CTE löst dieses Problem elegant. Die folgende Abfrage zeigt, wie eine Kategorie und ihre gesamte Abstammung abgerufen werden:
<code class="language-sql">WITH RecursiveCategoryCTE AS ( SELECT c.Id, c.Name, CAST(c.Name AS nvarchar(MAX)) AS Path FROM Categories AS c WHERE c.ParentId IS NULL UNION ALL SELECT t.Id, t.Name, CAST(r.Path + ',' + t.Name AS nvarchar(MAX)) AS Path FROM RecursiveCategoryCTE AS r JOIN Categories AS t ON t.ParentId = r.Id ) SELECT c.Id, c.Name, c.Path FROM RecursiveCategoryCTE AS c WHERE c.Name = 'Business Laptops';</code>
RecursiveCategoryCTE
, beginnt mit der Auswahl von Stammkategorien (wobei ParentId
NULL ist).Categories
verknüpft und die Spalte Path
erstellt, um die Namen der Vorfahren zu sammeln.SELECT
-Anweisung filtert nach der Zielkategorie („Business-Laptops“) und dem generierten Abstammungspfad.Das Ergebnis wäre:
Id | Name | Path |
---|---|---|
12 | Business Laptops | Computers,Laptops,Business Laptops |
Diese Technik ist in vielen Anwendungen wertvoll, darunter:
Dieser Ansatz bietet eine prägnante und effiziente Methode zum Navigieren in hierarchischen Daten innerhalb von SQL Server.
Das obige ist der detaillierte Inhalt vonWie können rekursive Self-Joins in SQL Server hierarchische Daten effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!