Table1
t_id | code | name |
---|---|---|
1 | PM123 | Hello |
2 | PM456 | Hello2 |
Table2
id | t_id | value |
---|---|---|
1 | 1 | something1 |
2 | 1 | something2 |
3 | 1 | something3 |
4 | 2 | baby1 |
5 | 2 | baby2 |
我想抽出以下的 result
t_id | code | name | value | value | value |
---|---|---|---|---|---|
1 | PM123 | Hello | something1 | something2 | something3 |
2 | PM456 | Hello2 | baby1 | baby2 |
在上例中如果單純用 LEFT JOIN, 會返回 5 行的資料 如果用 GROUP BY 雖然可以拼合為 2 行資料, 但 value 的值則依排列方式只能返回其中一行的值 那要如何做才能做到我們想要的結果呢?
這個時間就要用到 GROUP_CONCAT 了, GROUP_CONCAT 可以將使用GROUP BY 拼合後的條目中不同值的拼合並排列出一個以","分隔的字串 以上例來說, 可以這樣寫:
SELECT t1_id, code, name, GROUP_CONCAT(value) as value FROM table1 LEFT JOIN table 2 ON table1.t1_id=table2.t1_id GROUP BY table2.t1_id
得出的結果是
t_id | code | name | value |
---|---|---|---|
1 | PM123 | Hello | something1,something2,something3 |
2 | PM456 | Hello2 | baby1,baby2 |
此外,利用GROUP_CONCAT你還可以自行加入一些分隔符號去拼合你的結果, 例如上例將 GROUP_CONCAT(value) as value 改為 GROUP_CONCAT(id,'-',value) as value, value 便會變成 1-something1,2-something2,3-something3, 用途廣泛。