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 の昇順に並べて、簡単なクエリを提供します。製品グループとそのメンバーを識別する方法。
再帰のカスタマイズDepth
OPTION(MAXRECURSION n) 句を使用すると、再帰の最大の深さを制御できます。これは、複雑な製品関係がある場合の過剰な再帰を防ぐのに役立ちます。
デモ
詳細なデモについては、SQL Fiddle を参照してください。例:
https://www.sqlfiddle.com/#!17/d4e0f/20332
以上が再帰的 CTE は、一致するペアに基づいて SQL Server 内の製品グループをどのように識別できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。