SQL连接行查询

时间:2010-05-21 21:29:44

标签: mysql sql

说我们有一张桌子

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       |

3 个答案:

答案 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)