同一个表的MySql组?

同一个表的MySql组?,mysql,sql,group-by,Mysql,Sql,Group By,有一个“联系人”列表。有些“联系人”是父母,有些是孩子。某些联系人有多个子联系人。有些孩子的父母不止一个。 联系人可以是父母和子女(孙子女) 联系人之间的关系映射在表“parents\u和\u children”中 at查询的结果应为: +-------------------+------------------+ | parent(s) name(s) | children name(s) | +-------------------+------------------+ | p1, p5

有一个“联系人”列表。有些“联系人”是父母,有些是孩子。某些联系人有多个子联系人。有些孩子的父母不止一个。 联系人可以是父母和子女(孙子女)

联系人之间的关系映射在表“parents\u和\u children”中

at查询的结果应为:

+-------------------+------------------+
| parent(s) name(s) | children name(s) |
+-------------------+------------------+
| p1, p5            | p2, p3           |
| p3                | p4               |
| p5                | p6               |
+-------------------+------------------+
请注意,p3是p1和p5的子级,也是p4的父级。p5是p2和p3与p1的父级,而p6是自己的父级


我不需要完整的解决方案。请告诉我方向,我自己去。到目前为止,没有任何效果。

您可以像这样使用
GROUP\u CONCAT
两次:

select pnames,
    group_concat(distinct cname order by cname separator ',') cnames
from (
    select group_concat(distinct c1.name order by c1.name separator ',') pnames,
        c2.name cname
    from parents_and_children p
    join contacts c1 on p.parent_id = c1.id
    join contacts c2 on p.child_id = c2.id
    group by c2.name
    ) t
group by pnames

@GrzegorzGórkiewicz-我从哪里猜到的?我对
group_concat
不够熟悉,所以没有投票否决这一点;)如果你能解释一下上面的查询是做什么的,那就太好了。MySQL不支持递归。。。这就是为什么这个问题被广泛讨论的原因
select pnames,
    group_concat(distinct cname order by cname separator ',') cnames
from (
    select group_concat(distinct c1.name order by c1.name separator ',') pnames,
        c2.name cname
    from parents_and_children p
    join contacts c1 on p.parent_id = c1.id
    join contacts c2 on p.child_id = c2.id
    group by c2.name
    ) t
group by pnames