ホームページ > データベース > mysql チュートリアル > 再帰的 CTE は、一致するペアに基づいて SQL Server 内の製品グループをどのように識別できますか?

再帰的 CTE は、一致するペアに基づいて SQL Server 内の製品グループをどのように識別できますか?

Patricia Arquette
リリース: 2025-01-05 07:32:39
オリジナル
861 人が閲覧しました

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 の昇順に並べて、簡単なクエリを提供します。製品グループとそのメンバーを識別する方法。

再帰のカスタマイズDepth

OPTION(MAXRECURSION n) 句を使用すると、再帰の最大の深さを制御できます。これは、複雑な製品関係がある場合の過剰な再帰を防ぐのに役立ちます。

デモ

詳細なデモについては、SQL Fiddle を参照してください。例:

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

以上が再帰的 CTE は、一致するペアに基づいて SQL Server 内の製品グループをどのように識別できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート