ホームページ >データベース >mysql チュートリアル >再帰 SQL クエリでは、最小製品 ID で一致する製品をグループ化するにはどうすればよいですか?

再帰 SQL クエリでは、最小製品 ID で一致する製品をグループ化するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-05 11:27:39329ブラウズ

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 を matchs テーブルと結合して、一致する Product_ID を特定し、それらをグループに追加します。このプロセスは、すべての一致が処理されるまで続行されます。

最終結果は、各グループの MIN Product_ID と、そのグループに属するすべての Product_ID を含む groups という名前のテーブルです。この構造により、製品の関係とグループ化に対する効率的なクエリが可能になります。

注:

再帰の深さを制御するには、OPTION(MAXRECURSION n) 句を使用し、n を必要な最大再帰レベル。

例: SQL Fiddleデモ

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

以上が再帰 SQL クエリでは、最小製品 ID で一致する製品をグループ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。