说我们有一张桌子
table posts +---------+-----------+--------------------------------+ | postId | title | status | bodyText | +---------+-----------+--------------------------------+ | 1 | Hello! | deleted | A deleted post! | | 2 | Hello 2! | deleted | Another one! | | 3 | New 1 | new | A new one! | | 4 | New 2 | new | A new one again! |
我们可以在SQL中通过发出单个查询来检索跨行的字段的串联,而不必在我们的后端代码中循环连接吗?
像
这样的东西select title from posts group by status ;
应该给出像
这样的结果+---------+--------------------+ | deleted | Hello!, Hello 2! | | new | New 1, New 2 |
答案 0 :(得分:4)
如果您使用MySQL,则可以使用GROUP_CONCAT:
SELECT status, GROUP_CONCAT(title)
FROM posts
GROUP BY status
答案 1 :(得分:2)
在MySQL
:
SELECT status, GROUP_CONCAT(title SEPARATOR ', ')
FROM posts
GROUP BY
status
在PostgreSQL
:
SELECT status,
ARRAY_TO_STRING(
ARRAY(
SELECT title
FROM posts pi
WHERE pi.status = po.status
))
FROM posts po
GROUP BY
status
答案 2 :(得分:2)
您没有指明特定的SQL引擎。
在Firebird(来自2.1)中,您可以使用LIST()函数。看看:link text
这是一个集合功能,可以完全满足你的需要。
我猜它存在于其他引擎中(Sybase SQL Anywhere中的LIST,MySQL中的GROUP_CONCAT)