ホームページ >データベース >mysql チュートリアル >複数の SQL テーブルからカンマ区切りのリストを効率的に生成するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。