今天改一個問題,業務上是一對多關系,按照正常的思維查出來數據會顯示多條,這顯然是不對的。我們需要的是一個商戶從屬多個平台方,對商戶列表來說,用於只有一條數據才對。
Mysql中的GROUP_CONCAT(expr) 函數完美的解決了我的問題。
一、基本語法
| GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val]) |
二、使用例子
注意:group_concat函數不能和in一起使用,但通過find_in_set來實現in的效果
| SELECT A.*, ( SELECT group_concat(B. NAME) FROM tableB B WHERE find_in_set(B.id, A.platId) ) AS name FROM tableA A |
三、GROUP_CONCAT(expr)默認分隔符是“,”,還可以通過separator來自定義分隔符
| SELECT A.*, ( SELECT group_concat(B. NAME SEPARATOR ";") FROM tableB B WHERE find_in_set(B.id, A.platId) ) AS name FROM tableA A |
四、根據組的值來進行排序再連接成字符串,例如按id降序來排:
| SELECT A.*, ( SELECT group_concat(B. NAME SEPARATOR ";" order by NAME desc) FROM tableB B WHERE find_in_set(B.id, A.platId) ) AS name FROM tableA A |
