首頁 >資料庫 >mysql教程 >遞歸SQL查詢如何以最小產品ID對比對產品進行分組?

遞歸SQL查詢如何以最小產品ID對比對產品進行分組?

Barbara Streisand
Barbara Streisand原創
2025-01-05 11:27:39271瀏覽

How Can a Recursive SQL Query Group Matching Products by Minimum Product ID?

SQL Server 中的遞迴查詢

要擷取以最小產品 ID 分組的符合產品,可以使用遞迴查詢。此查詢迭代表,遍歷 Product_ID 關係,並將結果累積到單獨的群組表中。遞歸結構確保所有匹配項都被識別並包含在結果中。

解決方案:

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 是一個遞歸定義,它標識每組的最小 Product_ID。查詢首先選擇沒有符合 Product_Id 的 Product_ID,建立初始群組。在遞歸步驟中,查詢將 CTE 與匹配表連接起來,以識別匹配的 Product_ID 並將它們新增至群組。此過程持續進行,直到處理完所有符合項目。

最終結果是一個名為 groups 的表,其中包含每個群組的 MIN Product_ID 以及屬於該群組的所有 Product_ID。此結構可實現對產品關係和分組的高效查詢。

注意:

要控制遞迴深度,請使用 OPTION(MAXRECURSION n) 子句,將 n 替換為所需的最大遞迴層級。

範例:SQL Fiddle示範

https://www.sqlfiddle.com/#!18/c772e/11

以上是遞歸SQL查詢如何以最小產品ID對比對產品進行分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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