loading
Please wait while loading...
返回 一個很有用的MySQL涵數 - GROUP_CONCAT

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, 用途廣泛。

Comments
comments powered by Disqus