SQL связывает запрос строк - PullRequest
2 голосов
/ 22 мая 2010

Скажем, у нас есть стол

table <b>posts</b>
+---------+-----------+--------------------------------+
| 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 ]

4 голосов
/ 22 мая 2010

Если вы используете MySQL, вы можете использовать GROUP_CONCAT :

SELECT status, GROUP_CONCAT(title)
FROM posts
GROUP BY status
2 голосов
/ 22 мая 2010

Вы не указали конкретный движок SQL.

В Firebird (из 2.1) вы можете использовать функцию LIST (). Взгляните на: текст ссылки

Это агрегатная функция, которая делает именно то, что вам нужно.

Я предполагаю, что он существует в других движках (LIST в Sybase SQL Anywhere, GROUP_CONCAT в MySQL)

2 голосов
/ 22 мая 2010

В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...