首頁 > 資料庫 > mysql教程 > 如何使用遞迴查詢在 SQL Server 中將符合產品分組?

如何使用遞迴查詢在 SQL Server 中將符合產品分組?

DDD
發布: 2025-01-05 13:19:41
原創
298 人瀏覽過

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

SQL Server:對匹配產品進行分組的遞歸查詢

在名為「matches」的關係資料庫表中,每筆記錄代表兩個之間的匹配產品。目標是建立一個「群組」表,以分層結構捕獲這些匹配項。具體來說,「group_ID」欄位應儲存屬於同一組的最小產品 ID。

為了實現這一點,我們可以利用 SQL 中遞歸查詢的功能。遞歸查詢對相同資料執行多輪操作。以下是一個使用公共表表達式(CTE) 來追蹤遞歸操作的解決方案:

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
登入後複製

遞歸的基本情況是當產品沒有匹配項時,在這種情況下它會形成自己的組。這是在 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
登入後複製

CTE 的遞迴部分找出每組的所有配對產品。它會迭代地將這些匹配的產品添加到群組中。

    SELECT
        C.Group_ID,
        M.matching_Product_Id
    FROM CTE C
        JOIN matches M
            ON C.Product_ID = M.Product_ID
登入後複製

最後,我們可以透過按「Group_ID」欄位對 CTE 進行排序來依層次順序擷取結果。

SELECT * FROM CTE ORDER BY Group_ID
登入後複製

這遞歸查詢有效地在「groups」表中產生所需的產品分組。層次關係由「group_ID」欄位捕獲,確保每一行反映不同的產品群組。

透過利用 SQL Server 的遞歸功能,我們可以有效率地擷取複雜的層次結構模式和複雜的群組相關資料。資料庫結構。

以上是如何使用遞迴查詢在 SQL Server 中將符合產品分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板