代码之家  ›  专栏  ›  技术社区  ›  bobobobo

SQL连接行查询

  •  2
  • bobobobo  · 技术社区  · 15 年前

    假设我们有一张桌子

    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 回复  |  直到 14 年前
        1
  •  4
  •   Mark Byers    15 年前

    如果使用mysql,那么可以使用 GROUP_CONCAT :

    SELECT status, GROUP_CONCAT(title)
    FROM posts
    GROUP BY status
    
        2
  •  2
  •   Quassnoi    15 年前

    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
  •  2
  •   Daniel Luyo    15 年前

    您没有指定特定的SQL引擎。

    在Firebird中(从2.1开始),可以使用list()函数。看一看: link text

    它是一个聚合函数,可以完全满足您的需要。

    我想它存在于其他引擎中(Sybase SQL Anywhere中的列表,MySQL中的group_concat)