2010-05-21 71 views
2

假設我們有一個表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,檢索跨行場的串聯,通過發出一個查詢,不必做會合在一個循環在我們的後端代碼?

喜歡的東西

如果你使用MySQL,那麼你可以使用 GROUP_CONCAT
 
select title from posts group by status ; 

應該給像

 
+---------+--------------------+ 
| deleted | Hello!, Hello 2! | 
| new  | New 1, New 2  | 
+0

有許多人僅在過去一週至少3個GROUP_CONCAT問題......也許谷歌是壞了。 – mdma 2010-05-21 21:33:56

+1

那麼如果我搜索了GROUP_CONCAT,我相信我會找到它;) – bobobobo 2010-05-21 21:35:29

回答

4

結果:

SELECT status, GROUP_CONCAT(title) 
FROM posts 
GROUP BY status 
+0

哦,甜蜜。這正是我想要的。 – bobobobo 2010-05-21 21:34:08

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

你沒有指明特定的SQL引擎。

在Firebird(2.1版)中,您可以使用LIST()函數。看看:link text

這是一個聚合函數來完成你所需要的。

我想這在其他引擎存在(在Sybase SQL Anywhere的清單,GROUP_CONCAT在MySQL)