Heim >Datenbank >MySQL-Tutorial >Wie können rekursive CTEs Produktgruppen in SQL Server anhand übereinstimmender Paare identifizieren?

Wie können rekursive CTEs Produktgruppen in SQL Server anhand übereinstimmender Paare identifizieren?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-05 07:32:39820Durchsuche

How Can Recursive CTEs Identify Product Groups in SQL Server Based on Matching Pairs?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn