我有两个表,关键字和数据。
表关键字有2列(id,关键字),表数据有3列(id [keywords.id]的外键,名称,值)。
我正在使用此查询:
SELECT k.id, d.value, d.name
FROM keywords AS k
INNER JOIN data as d ON k.id = d.id
它返回的内容如下:
1 123 name1
1 456 name2
2 943 name1
3 542 name1
3 532 name2
3 682 name3
每个id的值可以是0到3(将来可能更多)。
如何在同一行中检索具有相同ID的所有行?
像
1 123 456
2 943
3 542 532 682
我想这样做,因为我希望能够对值进行排序。
答案 0 :(得分:75)
像这样使用GROUP_CONCAT()
:
SELECT k.id, GROUP_CONCAT(d.value)
FROM keywords AS k
INNER JOIN data as d ON k.id = d.id
GROUP BY k.id
此外,您可能需要ORDER BY d.name
来获取所需的确切值顺序。像这样:
SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ')
FROM keywords AS k
INNER JOIN data as d ON k.id = d.id
GROUP BY k.id