MySQL サブクエリとカンマ区切りリスト: 実践ガイド
複数の MySQL テーブルの操作にはサブクエリが含まれることがよくあります。 ただし、サブクエリの結果からカンマ区切りのリストを生成するのは難しい場合があります。このガイドでは、GROUP_CONCAT
.
課題:
次のシナリオを考えてみましょう。パブリケーション ID、名前、および関連するサイト名のカンマ区切りリストを取得するクエリが必要です。 サブクエリを使用した単純なアプローチは次のようになります:
<code class="language-sql">SELECT p.id, p.name, (SELECT name FROM sites s WHERE s.id = p.site_id) AS site_list FROM publications p;</code>
これでは、カンマ区切りの文字列は生成されません。代わりに、行ごとに 1 つのサイト名を返します。
GROUP_CONCAT
による解決策:
MySQL の GROUP_CONCAT
関数は、カンマ区切りリストを作成するための鍵です。 改良されたクエリは次のとおりです:
<code class="language-sql">SELECT p.id, p.name, GROUP_CONCAT(s.name) AS site_list FROM sites s INNER JOIN publications p ON s.id = p.site_id GROUP BY p.id, p.name;</code>
仕組み:
INNER JOIN
: これは、一致する publications
に基づいて sites
テーブルと site_id
テーブルを効率的にリンクします。 対応するサイトがある出版物のみが含まれます。GROUP_CONCAT(s.name)
: この関数は、各パブリケーション ID のすべての s.name
値 (サイト名) を単一のカンマ区切り文字列に連結し、site_list
列に格納します。GROUP BY p.id, p.name
: これにより、結果がパブリケーション ID と名前別にグループ化され、GROUP_CONCAT
が各パブリケーションに対して正しく動作することが保証されます。この改訂されたクエリは、目的の出力、つまりパブリケーション ID、名前、および関連するサイト名のきちんとした形式のカンマ区切りリストを提供します。
以上がMySQL サブクエリからカンマ区切りリストを効率的に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。