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