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