「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > SQL Serverの製品を一致させるために再帰クエリグループ化を使用する方法は?

SQL Serverの製品を一致させるために再帰クエリグループ化を使用する方法は?

2025-04-19に投稿されました
ブラウズ:164

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

sql server:「matches」という名前のリレーショナルデータベーステーブルで、一致した製品

をグループ化するための再帰クエリ、各レコードは2つの製品間の一致を表します。目標は、階層構造でこれらの一致をキャプチャする「グループ」テーブルを作成することです。具体的には、「Group_id」列は、同じグループに属するものに最小製品IDを保存する必要があります。再帰クエリは、同じデータで複数の操作を実行します。これは、CTEを使用して、再帰操作を追跡するために共通のテーブル式(CTE)を使用するソリューションです。 として ( [異なる]を選択します m1.product_id as group_id、 m1.product_id 一致M1から 左結合マッチM2 on m1.product_id = m2.matching_product_id ここで、m2.matching_product_idはnullです ユニオンすべて 選択します c.group_id、 M.Matching_Product_id CTEからc マッチmに参加します c.product_id = m.product_id )) select * from cte order by group_id

再帰の基本ケースは、製品に一致していない場合、その場合は独自のグループを形成します。これはCTEの最初の部分でキャプチャされます。 m1.product_id as group_id、 m1.product_id 一致M1から 左結合マッチM2 on m1.product_id = m2.matching_product_id ここで、m2.matching_product_idはnull

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

Select c.group_id、 M.Matching_Product_id CTEからc マッチmに参加します c.product_id = m.product_id

最後に、cteを「group_id」列で並べ替えることにより、結果を階層的順序で取得できます。階層的な関係は、「group_id」列によってキャプチャされ、各行が明確な製品グループを反映していることを保証します。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3