【问题标题】:SQL concatenate rows querySQL 连接行查询
【发布时间】:2010-05-21 21:29:44
【问题描述】:

假设我们有一张桌子

帖子 +---------+-----------+--------------- -----+ |邮编 |标题 |状态 |正文 | +---------+-----------+--------------- -----+ | 1 |你好! |已删除 |被删帖! | | 2 |你好2! |已删除 |另一个! | | 3 |新 1 |新 |一个新的! | | 4 |新 2 |新 |又是一个新的! |

我们能否在 SQL 中通过发出单个查询来检索跨行的字段连接,而不必在后端代码中循环连接?

类似

按状态从帖子组中选择标题;

应该给出类似的结果

+---------+---------+ |已删除 |你好!,你好2! | |新 |新1,新2 |

【问题讨论】:

  • 仅在上周就有至少 3 个 GROUP_CONCAT 问题......也许 google 坏了。
  • 好吧,如果我搜索 GROUP_CONCAT,我肯定会找到它;)

标签: mysql sql


【解决方案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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      相关资源
      最近更新 更多