【MySQL】GROUP_CONCATを使用した場合の挙動
状況
GROUP_CONCATは、連結された文字列を返す集約関数。
1対多で、例えばidをkeyにして、複数テーブルとjoinしている場合。
GROUP_CONCATを使い、複数あるnameを一つのカラムにまとめていたが、そのnameが重複している。どのようなデータなのかにもよるが、ここではnameが重複しないことが求められている。
解決
distinctで重複が解決されたが、他にもサブクエリを使用した書き方もある。
サブクエリを使う場合は各々でSELECTしてこないといけない。
SELECT GROUP_CONCAT(distinct(name)) FROM
SELECT ( SELECT GROUP_CONCAT(name) FROM hoge WHERE a.id = b.id) nameA FROM
以上
一応リファレンスには、distinctが書かれてある。
重複する値を除去するには、
DISTINCT
句を使用しますGROUP_CONCAT([DISTINCT] expr [,expr …] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name …]] [SEPARATOR str_val])
12.19.1 GROUP BY (集約) 関数(2022.3.9参照)