MySQL group_concat和concat姓氏,姓氏和标题

时间:2016-06-29 15:04:05

标签: mysql

我有两张桌子

地方

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 之前产生额外的空白。是否有可能在没有额外空格的情况下得到结果?

1 个答案:

答案 0 :(得分:1)

这是因为你的CONCAT功能空间。 Wonder WoamnHarry Barry都没有标题,因此CONCAT函数方法返回[emtpy-string][space]Wonder[space][Woamn]。当你将它与具有尾随空格的GROUP_CONCAT结合使用时,它显示为两个空格。

此问题的一个解决方案是返回带标题的空格,当且仅当标题不为空时。

CONCAT(IF(m.title IS NULL, NULL, CONCAT(m.title, " ")))

您的其他列也可能存在类似的问题。或者,您可以运行REGEXP搜索/替换来替换任何额外的空格,但这是另一种情况,我会建议不要这样做。