2013-07-15 86 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