ホームページ > データベース > mysql チュートリアル > MySQL サブクエリからカンマ区切りリストを効率的に抽出するにはどうすればよいですか?

MySQL サブクエリからカンマ区切りリストを効率的に抽出するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-17 01:52:08
オリジナル
581 人が閲覧しました

How to Efficiently Extract Comma-Separated Lists from MySQL Subqueries?

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 サイトの他の関連記事を参照してください。

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