Heim >Datenbank >MySQL-Tutorial >Wie gruppiere ich übereinstimmende Produkte in SQL Server mithilfe rekursiver Abfragen?

Wie gruppiere ich übereinstimmende Produkte in SQL Server mithilfe rekursiver Abfragen?

DDD
DDDOriginal
2025-01-05 13:19:41328Durchsuche

How to Group Matched Products in SQL Server Using Recursive Queries?

SQL Server: Rekursive Abfrage zum Gruppieren übereinstimmender Produkte

In einer relationalen Datenbanktabelle mit dem Namen „matches“ stellt jeder Datensatz eine Übereinstimmung zwischen zwei dar Produkte. Das Ziel besteht darin, eine „Gruppen“-Tabelle zu erstellen, die diese Übereinstimmungen in einer hierarchischen Struktur erfasst. Insbesondere sollte die Spalte „group_ID“ die minimale Produkt-ID derjenigen speichern, die derselben Gruppe angehören.

Um dies zu erreichen, können wir die Leistungsfähigkeit rekursiver Abfragen in SQL nutzen. Eine rekursive Abfrage führt mehrere Operationsrunden für dieselben Daten durch. Hier ist eine Lösung, die einen gemeinsamen Tabellenausdruck (CTE) verwendet, um rekursive Vorgänge zu verfolgen:

WITH CTE
AS
(
    SELECT DISTINCT
        M1.Product_ID AS Group_ID,
        M1.Product_ID
    FROM matches M1
        LEFT JOIN matches 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 C
        JOIN matches M
            ON C.Product_ID = M.Product_ID
)
SELECT * FROM CTE ORDER BY Group_ID

Der Basisfall der Rekursion liegt vor, wenn ein Produkt keine Übereinstimmungen aufweist. In diesem Fall bildet es eine eigene Gruppe. Dies wird im ersten Teil des CTE erfasst.

    SELECT DISTINCT
        M1.Product_ID AS Group_ID,
        M1.Product_ID
    FROM matches M1
        LEFT JOIN matches M2
            ON M1.Product_Id = M2.matching_Product_Id
    WHERE M2.matching_Product_Id IS NULL

Der rekursive Teil des CTE findet alle passenden Produkte für jede Gruppe. Diese passenden Produkte werden der Gruppe iterativ hinzugefügt.

    SELECT
        C.Group_ID,
        M.matching_Product_Id
    FROM CTE C
        JOIN matches M
            ON C.Product_ID = M.Product_ID

Schließlich können wir die Ergebnisse in hierarchischer Reihenfolge abrufen, indem wir den CTE nach der Spalte „Group_ID“ sortieren.

SELECT * FROM CTE ORDER BY Group_ID

Dies Eine rekursive Abfrage erzeugt effektiv die gewünschte Gruppierung von Produkten in der Tabelle „Gruppen“. Die hierarchische Beziehung wird durch die Spalte „group_ID“ erfasst und stellt sicher, dass jede Zeile eine bestimmte Produktgruppe widerspiegelt.

Durch die Nutzung der rekursiven Funktionen von SQL Server können wir komplexe hierarchische Muster effizient extrahieren und verwandte Daten in komplexen Gruppen gruppieren Datenbankstrukturen.

Das obige ist der detaillierte Inhalt vonWie gruppiere ich übereinstimmende Produkte in SQL Server mithilfe rekursiver Abfragen?. 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