SQL 连接行查询
Posted
技术标签:
【中文标题】SQL 连接行查询【英文标题】:SQL concatenate rows query 【发布时间】:2010-05-21 21:29:44 【问题描述】:假设我们有一张桌子
表帖子 +---------+-----------+--------------- -----+ |邮编 |标题 |状态 |正文 | +---------+-----------+--------------- -----+ | 1 |你好! |已删除 |被删帖! | | 2 |你好2! |已删除 |另一个! | | 3 |新 1 |新 |一个新的! | | 4 |新 2 |新 |又是一个新的! |我们能否在 SQL 中通过发出单个查询来检索跨行的字段连接,而不必在后端代码中循环连接?
类似
按状态从帖子组中选择标题;应该给出类似的结果
+---------+---------+ |已删除 |你好!,你好2! | |新 |新1,新2 |【问题讨论】:
仅在上周就有至少 3 个 GROUP_CONCAT 问题......也许 google 坏了。 好吧,如果我搜索 GROUP_CONCAT,我肯定会找到它;) 【参考方案1】:如果你使用 mysql 那么你可以使用GROUP_CONCAT:
SELECT status, GROUP_CONCAT(title)
FROM posts
GROUP BY status
【讨论】:
哦,天哪。这正是我想要的。【参考方案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
【讨论】:
【参考方案3】:您没有指明特定的 SQL 引擎。
在 Firebird(从 2.1 开始)中,您可以使用 LIST() 函数。看一看:link text
这是一个聚合函数,可以完全满足您的需求。
我猜它存在于其他引擎中(Sybase SQL Anywhere 中的 LIST,MySQL 中的 GROUP_CONCAT)
【讨论】:
以上是关于SQL 连接行查询的主要内容,如果未能解决你的问题,请参考以下文章