Rumah >pangkalan data >tutorial mysql >Bagaimanakah CTE Rekursif Boleh Mengenalpasti Kumpulan Produk dalam Pelayan SQL Berdasarkan Pasangan Padanan?

Bagaimanakah CTE Rekursif Boleh Mengenalpasti Kumpulan Produk dalam Pelayan SQL Berdasarkan Pasangan Padanan?

Patricia Arquette
Patricia Arquetteasal
2025-01-05 07:32:39819semak imbas

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

Pertanyaan Rekursif dalam Pelayan SQL

Jadual bernama 'padanan' menyimpan gandingan produk, di mana satu produk sepadan dengan produk lain. Matlamatnya adalah untuk mencipta jadual 'kumpulan' yang mengenal pasti kumpulan produk yang terdiri daripada semua produk yang sepadan antara satu sama lain. ID kumpulan harus menyimpan ID produk minimum dalam setiap kumpulan.

Penyelesaian CTE Rekursif

Untuk mencapainya, kami boleh menggunakan Ungkapan Jadual Biasa (CTE) rekursif sebagai berikut:

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;

CTE secara rekursif mencari semua produk yang berkaitan secara langsung atau tidak langsung antara satu sama lain. Ia bermula dengan mengenal pasti produk tanpa produk yang sepadan (Group_ID ialah Product_ID mereka sendiri). Kemudian, ia mendapatkan semula semua produk yang sepadan untuk setiap kumpulan, menambahkannya pada CTE. Klausa UNION ALL menggabungkan hasil pertanyaan awal dengan hasil lelaran berikutnya, memastikan semua produk yang sepadan ditemui.

Klausa ORDER BY Group_ID menyusun keputusan dalam tertib menaik bagi ID kumpulan, memberikan yang mudah cara untuk mengenal pasti kumpulan produk dan ahlinya.

Menyesuaikan Rekursi Kedalaman

Menggunakan klausa OPTION(MAXRECURSION n), kita boleh mengawal kedalaman rekursi maksimum, yang membantu mengelakkan pengulangan yang berlebihan dalam kes dengan perhubungan produk yang kompleks.

Demo

Untuk demonstrasi terperinci, rujuk SQL Fiddle contoh:

https://www.sqlfiddle.com/#!17/d4e0f/20332

Atas ialah kandungan terperinci Bagaimanakah CTE Rekursif Boleh Mengenalpasti Kumpulan Produk dalam Pelayan SQL Berdasarkan Pasangan Padanan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn