【MySQL】GROUP_CONCAT()を使ってみる
以下のようなテーブルがあるとします。
Aテーブル
Bテーブル
以下のようなSQLを流すと、
SELECT A.id, GROUP_CONCAT(B.bname) as namae FROM A, B WHERE A.id = B.aid GROUP BY A.id
こんな風に、まとめてくれました。
そのほか、以下のようなこともできます。
昇順・降順に並べてくれる
GROUP_CONCAT(B.bname order by B.id)
重複する名前をまとめてくれる
GROUP_CONCAT(distinct(B.bname))
区切り文字指定もできる
GROUP_CONCAT(B.bname separator '/')
参考
・ MySQLの独自の関数なので、他のデータベースを使う場合は要検討(Oracleだとwmsys.wm_concatがあるなど)。
・ NULLを含む場合注意。
この関数は、グループからの連結された非 NULL 値を伴うストリング結果を戻します。非 NULL 値がない場合は NULL を戻します。
http://dev.mysql.com/doc/refman/5.1/ja/group-by-functions.html
・ 文字列を結合した結果、文字列が長くなりそうな場合は要注意。
group_concat_max_len システム環境変数は、許可された最大の長さに設定することができます。 ( デフォルト値は 1024 ) 。
最大の長さが設定された場合、結果はその最大の長さに切り詰められます。
GROUP_CONCAT() によって戻されるタイプは、group_concat_max_len が 512 より大きい場合意外は常に VARCHAR になります。512 を越える場合は BLOB になります。
http://dev.mysql.com/doc/refman/5.1/ja/group-by-functions.html
要するに文字数制限があり、
show variables like 'group_concat_max_len';
で確認できる。
set session group_concat_max_len=10000;
などで設定できる。
M山 2015年4月2日 17:02
忘れたころに役立ちます!ありがとうございます。