MySQL 5.1.68を使用しています。
別のテーブルから列に行を選択したい状況があります。
これを出力したい:
id#name#citizen_name(複数の市民名)
1#ハーグ#バラク・オバマ、マーク・ザッカーバーグ、ジョージ・ブッシュ
複数のクエリでこれを行う方法を知っていますが、1つのクエリだけでこれを実行したいと思います。私はgroup_concatとconcat_wsを調べてきましたが、残念ながら、これは私が探していた結果をぼんやりさせていません。また、SELECTサブクエリの結果を変数に入れてそれらの結果をCONCATしようとしましたが、それも機能しませんでした。
スキーマといくつかのテストデータを表示する私のSQLフィドル: http://sqlfiddle.com/#!2/c7c7e/1 。
私に何ができる?
GROUP_CONCAT を使用して、市民名を最初に集計する必要があります。次に [〜#〜] concat [〜#〜] を使用します
SELECT CONCAT(id,' # ',name,' # ',citizens) listing FROM
(
SELECT A.id,A.name,GROUP_CONCAT(B.name,' ',B.surname) citizens
FROM city A INNER JOIN citizen B
ON A.id = B.city_id GROUP BY A.id,A.name
) AA;
ここにSQL Fiddleそれを証明するために: http://sqlfiddle.com/#!2/9f4b3/1
切り捨てが原因で名前が長くなりすぎる場合は、 GROUP_CONCAT の最大長を拡張する必要があります。これを16Kに設定するには、次のコマンドを実行します。
SET group_concat_max_len = 1024 * 16;
SET GLOBAL group_concat_max_len = 1024 * 16;
1行目はセッション用、2行目はすべての新しいDB接続用です。