2013-02-21 51 views
1

我有两个MySQL表SQL将一个连接表的多个记录分组?

Parent 
id, name 
1, Parent 1 
2, Parent 2 

Children 
id, parent_id, name 
1,1, Child P1 1 
2,1, Child P1 2 
3,2, Child P2 1 
4,2, Child P2 2 
5,2, Child P2 3 

我知道SQL从两个表提取记录是

Select Parent.id, Parent.name, Children.id, Children.name 
from Parent 
left join Children 
    on Children.parent_id=Parent.id 

这将返回类似

Parent.id Parent.name Children.id Children.Name 
1   Parent 1  1    Child P1 1 
1   Parent 1  2    Child P1 2 
2   Parent 2  3    Child P2 1 
2   Parent 2  4    Child P2 2 
2   Parent 2  5    Child P2 3 

是否有一个SQL在MySQL中查询可以返回类似这样的内容

Parent.id Parent.name Children_ids Children_Names 
1   Parent 1  1,2   Child P1 1,Child P1 2 
2   Parent 2  3,4,5   Child P2 1,Child P2 2,Child P2 3 

在此先感谢。

回答

0

在MySQL中,您将需要使用GROUP_CONCAT()函数,该函数将多行连接成单行。由于这是一个聚合函数,你也将使用在查询GROUP BY条款:

select p.id, 
    p.name, 
    group_concat(c.id order by c.id) ChildrenIds, 
    group_concat(c.name order by c.id) ChildrenNames 
from parent p 
left join children c 
    on p.id = c.parent_id 
group by p.id, p.name 

SQL Fiddle with Demo

结果是:

| ID |  NAME | CHILDRENIDS |     CHILDRENNAMES | 
------------------------------------------------------------------ 
| 1 | Parent 1 |   1,2 |   Child P1 1,Child P1 2 | 
| 2 | Parent 2 |  3,4,5 | Child P2 1,Child P2 2,Child P2 3 |