我有两张桌子
地方
id | name | year | -------------------- 1 | Berlin | 1966 | 2 | Paris | 2012 |
和
构件
id | title | surname | lastname | idPlace | ------------------------------------------- 1 | Dr | Maxi | Bax | 1 | 2 | | Ameli | Steifer | 2 | 3 | | Wonder | Woman | 1 | 4 | | Harry | Barry | 2 |
结果我想得到
name | year | members | ---------------------------------------------- Berlin | 2011 | Dr Maxi Bax, Wonder Woamn | Parins | 2050 | Ameli Steifer, Harry Barry |
我设法使用这个SQL
SELECT p.name, p.year,
GROUP_CONCAT(CONCAT(m.title, " " ,m.surname," ", m.lastname) SEPARATOR ', ')
AS members FROM places p INNER JOIN member m on p.id = m.idPlace
GROUP BY m.idPlace
以下结果
name | year | members | ---------------------------------------------- Berlin | 2011 | Dr Maxi Bax, Wonder Woamn | Parins | 2050 | Ameli Steifer, Harry Barry |
在神奇女侠和 Harry Barry 之前产生额外的空白。是否有可能在没有额外空格的情况下得到结果?
答案 0 :(得分:1)
这是因为你的CONCAT功能空间。 Wonder Woamn
和Harry Barry
都没有标题,因此CONCAT函数方法返回[emtpy-string][space]Wonder[space][Woamn]
。当你将它与具有尾随空格的GROUP_CONCAT结合使用时,它显示为两个空格。
此问题的一个解决方案是返回带标题的空格,当且仅当标题不为空时。
CONCAT(IF(m.title IS NULL, NULL, CONCAT(m.title, " ")))
您的其他列也可能存在类似的问题。或者,您可以运行REGEXP搜索/替换来替换任何额外的空格,但这是另一种情况,我会建议不要这样做。