【MySQL】GROUP_CONCATを使用した場合の挙動

MySQL

状況

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参照)

参照

GROUP BY (集約) 関数

MySQL, programming, SQL

Posted by himajinn