Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menghimpunkan Produk Padanan dalam Pelayan SQL Menggunakan Pertanyaan Rekursif?

Bagaimana untuk Menghimpunkan Produk Padanan dalam Pelayan SQL Menggunakan Pertanyaan Rekursif?

DDD
DDDasal
2025-01-05 13:19:41310semak imbas

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

SQL Server: Rekursif Pertanyaan untuk Menghimpunkan Produk Dipadankan

Dalam jadual pangkalan data hubungan bernama "padanan," setiap rekod mewakili padanan antara dua produk. Matlamatnya ialah untuk mencipta jadual "kumpulan" yang menangkap padanan ini dalam struktur hierarki. Khususnya, lajur "group_ID" harus menyimpan ID produk minimum antara yang tergolong dalam kumpulan yang sama.

Untuk mencapainya, kami boleh memanfaatkan kuasa pertanyaan rekursif dalam SQL. Pertanyaan rekursif melakukan beberapa pusingan operasi pada data yang sama. Berikut ialah penyelesaian yang menggunakan ungkapan jadual biasa (CTE) untuk menjejaki operasi rekursif:

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

Kes asas rekursi ialah apabila produk tidak mempunyai padanan, dalam hal ini ia membentuk kumpulannya sendiri. Ini ditangkap dalam bahagian pertama CTE.

    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

Bahagian rekursif CTE mencari semua produk yang sepadan untuk setiap kumpulan. Ia secara berulang menambah produk padanan ini pada kumpulan.

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

Akhir sekali, kami boleh mendapatkan semula keputusan dalam susunan hierarki dengan mengisih CTE mengikut lajur "Group_ID".

SELECT * FROM CTE ORDER BY Group_ID

Ini pertanyaan rekursif berkesan menghasilkan kumpulan produk yang diingini dalam jadual "kumpulan". Hubungan hierarki ditangkap oleh lajur "group_ID", memastikan setiap baris menggambarkan kumpulan produk yang berbeza.

Dengan memanfaatkan keupayaan rekursif SQL Server, kami boleh mengekstrak corak hierarki kompleks dan data berkaitan kumpulan dalam kompleks dengan cekap dengan cekap struktur pangkalan data.

Atas ialah kandungan terperinci Bagaimana untuk Menghimpunkan Produk Padanan dalam Pelayan SQL Menggunakan Pertanyaan Rekursif?. 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