2013-07-15 26 views
0

我有2個表通過連接表連接。他們看起來像下面使用逗號連接多行中的多個字段

 servers    serverInstances   instances 
| id |  ip  |  | id | sID | iID |  | id | name | 
|____|____________|  |____|_____|_____|  |____|______| 
| 11 | 10.0.0.100 |  | 1 | 11 | 40 |  | 40 | real | 
| 12 | 10.0.0.200 |  | 2 | 11 | 41 |  | 41 | fake | 
         | 3 | 12 | 45 |  | 45 | test | 

隨着下面的查詢,我可以得到以下數據

SELECT s.ip, i.name 
FROM servers AS s 
JOIN serverInstances AS si ON s.ID = si.sID 
JOIN Instances AS i ON si.iID = i.ID 


|  ip  | name | 
|____________|______| 
| 10.0.0.100 | real | 
| 10.0.0.100 | fake | 
| 10.0.0.200 | test | 

我有,走的是上述信息,並編寫一個查詢,將返回的麻煩是什麼以下。

|  ip  | instances | 
|____________|____________| 
| 10.0.0.100 | real, fake | 
| 10.0.0.200 | test | 

是否有一種簡單而動態的方式來編寫此查詢?

+2

查看「GROUP_CONCAT」的手冊 – bwoebi

+0

真棒。我會這麼做 – mhopkins321

+1

@bwoebi你應該回答爲 – Orangepill

回答

3

由於bwoebi在評論GROUP_CONCAT聲明會給你這一點。

SELECT s.ip, group_concat(DISTINCT i.name ORDER BY i.name ASC SEPARATOR ", ") as instances 
FROM servers AS s 
JOIN serverInstances AS si ON s.ID = si.sID 
JOIN Instances AS i ON si.iID = i.ID 
GROUP BY s.ip; 
1

我認爲這會爲你工作

SELECT s.ip, GROUP_CONCAT(i.name) 
FROM servers AS s 
JOIN serverInstances AS si ON s.ID = si.sID 
JOIN Instances AS i ON si.iID = i.ID 
GROUP BY s.ip