1

考虑以下架构:

create table A
(
    id int primary id
)

create table B
(
    a_id int,
    s varchar(255)
)

然后是以下查询:

select A.id, sum(1), ??? concat_join(B.s) ???
from A left join B on A.id = B.a_id group by A.id

A 和 B 之间存在一对多的关系,因此多行将组合为一个。“concat_join”的期望行为是对于组中的每个 B,通过连接它们(可能使用空格分隔符)将它们连接到一个字符串中。

有什么办法可以表达这是 MySQL 5.5 吗?

4

1 回答 1

4

使用GROUP_CONCAT

select A.id, sum(1), GROUP_CONCAT(B.s)
from A left join B on A.id = B.a_id 
group by A.id

默认情况下,字符串由逗号分隔。如果要更改它,请添加SEPARATOR关键字,

select A.id, sum(1), GROUP_CONCAT(B.s SEPARATOR ';')
from A left join B on A.id = B.a_id 
group by A.id
于 2012-11-17T14:57:39.950 回答