首頁 >資料庫 >mysql教程 >遞歸 CTE 如何根據配對對識別 SQL Server 中的產品群組?

遞歸 CTE 如何根據配對對識別 SQL Server 中的產品群組?

Patricia Arquette
Patricia Arquette原創
2025-01-05 07:32:39820瀏覽

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

SQL Server 中的遞歸查詢

名為「matches」的表格儲存產品配對,其中一個產品與另一個產品相符。目標是建立一個「群組」表,用於標識由所有相互匹配的產品組成的產品組。群組 ID 應儲存每個群組中的最小產品 ID。

遞歸CTE 解

為了實現此目的,我們可以採用遞歸通用表表達式(CTE):如下:

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 遞歸地尋找彼此直接或間接相關的所有產品。它首先識別沒有匹配產品的產品(Group_ID 是它們自己的 Product_ID)。然後,它會檢索每個組的所有匹配產品,並將它們添加到 CTE。 UNION ALL 子句將初始查詢的結果與後續迭代的結果組合起來,確保找到所有符合的產品。

ORDER BY Group_ID 子句按群組 ID 升序排列結果,提供了一種簡單的方法來識別產品群組及其成員的方法。

自訂遞歸深度

使用OPTION(MAXRECURSION n) 子句,我們可以控制最大遞歸深度,這有助於防止在產品關係複雜的情況下過度遞歸。

示範

詳細示範請參考SQL Fiddle範例:

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

以上是遞歸 CTE 如何根據配對對識別 SQL Server 中的產品群組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn