ホームページ >データベース >mysql チュートリアル >複数の SQL テーブルからカンマ区切りのリストを効率的に生成するにはどうすればよいですか?

複数の SQL テーブルからカンマ区切りのリストを効率的に生成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-18 22:21:11138ブラウズ

How to Efficiently Generate Comma-Separated Lists from Multiple SQL Tables?

SQL クエリを統合してカンマ区切りリストを生成します

SQL では、多くの場合、複数のテーブルのデータからカンマ区切りのリストを生成する必要があります。たとえば、Applications(id,name)、Resources(id,name)、ApplicationsResources(id,app_id,resource_id) という 3 つのテーブルがあり、すべてのリソース名を表示するテーブルを作成するとします。各行には次の内容が含まれます。リソースに関連付けられたアプリケーションのカンマ区切りのリスト。

最も簡単な方法は、リソースごとに個別のクエリを実行することですが、これは非効率的です。代わりに、より複雑な SQL テクニックを活用して、単一のクエリでこれを実現できます。

メソッド:

次の SQL クエリは、これを実現する方法を示しています。

MySQL:

<code class="language-sql">SELECT r.name,
         GROUP_CONCAT(a.name SEPARATOR ',')
    FROM RESOURCES r
    JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id
    JOIN APPLICATIONS a ON a.id = ar.app_id
GROUP BY r.name</code>

SQL Server (2005):

<code class="language-sql">SELECT r.name,
       STUFF((SELECT ',' + a.name
               FROM APPLICATIONS a
               JOIN APPLICATIONRESOURCES ar ON ar.app_id = a.id
              WHERE ar.resource_id = r.id
           GROUP BY a.name
            FOR XML PATH(''), TYPE).value('text()[1]','NVARCHAR(max)'), 1, LEN(','), '')
 FROM RESOURCES r</code>

SQL Server (2017):

<code class="language-sql">SELECT r.name,
         STRING_AGG(a.name, ',')
    FROM RESOURCES r
    JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id
    JOIN APPLICATIONS a ON a.id = ar.app_id
GROUP BY r.name</code>

オラクル:

Oracle では、文字列の集約と結合は異なる方法で処理されます。特定の文字列処理手法については、Oracle のドキュメントを参照してください。

以上が複数の SQL テーブルからカンマ区切りのリストを効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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