Heim >Datenbank >MySQL-Tutorial >Wie können rekursive CTEs Produktgruppen in SQL Server anhand übereinstimmender Paare identifizieren?
Rekursive Abfrage in SQL Server
Eine Tabelle mit dem Namen „matches“ speichert Produktpaarungen, bei denen ein Produkt mit einem anderen übereinstimmt. Das Ziel besteht darin, eine „Gruppen“-Tabelle zu erstellen, die Produktgruppen identifiziert, die aus allen Produkten bestehen, die zueinander passen. Die Gruppen-ID sollte die minimale Produkt-ID in jeder Gruppe speichern.
Rekursive CTE-Lösung
Um dies zu erreichen, können wir einen rekursiven Common Table Expression (CTE) als verwenden folgt:
WITH CTE AS ( SELECT DISTINCT M1.Product_ID AS Group_ID, M1.Product_ID FROM matches AS M1 LEFT JOIN matches AS M2 ON M1.Product_Id = M2.matching_Product_Id WHERE M2.matching_Product_Id IS NULL UNION ALL SELECT C.Group_ID, M.matching_Product_Id FROM CTE AS C JOIN matches AS M ON C.Product_ID = M.Product_ID ) SELECT * FROM CTE ORDER BY Group_ID;
Der CTE findet rekursiv alle Produkte, die direkt oder indirekt miteinander in Zusammenhang stehen. Es beginnt mit der Identifizierung von Produkten ohne passende Produkte (Group_ID ist ihre eigene Product_ID). Anschließend werden alle passenden Produkte für jede Gruppe abgerufen und zum CTE hinzugefügt. Die UNION ALL-Klausel kombiniert die Ergebnisse der ersten Abfrage mit den Ergebnissen nachfolgender Iterationen und stellt so sicher, dass alle passenden Produkte gefunden werden.
Die ORDER BY Group_ID-Klausel ordnet die Ergebnisse in aufsteigender Reihenfolge der Gruppen-ID an und sorgt so für eine einfache Möglichkeit, Produktgruppen und ihre Mitglieder zu identifizieren.
Anpassen der Rekursionstiefe
Verwenden der Mit der OPTION(MAXRECURSION n)-Klausel können wir die maximale Rekursionstiefe steuern, was dazu beiträgt, übermäßige Rekursion in Fällen mit komplexen Produktbeziehungen zu verhindern.
Demo
Für eine detaillierte Demonstration , siehe SQL Fiddle Beispiel:
https://www.sqlfiddle.com/#!17/d4e0f/20332
Das obige ist der detaillierte Inhalt vonWie können rekursive CTEs Produktgruppen in SQL Server anhand übereinstimmender Paare identifizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!