gpt4 book ai didi

MySql Group By 同一张表?

转载 作者:行者123 更新时间:2023-11-29 19:19:40 26 4
gpt4 key购买 nike

有一个“联系人”列表。有些“联系人”是 parent ,有些是 child 。有些联系人有不止一个 child 。有些 child 有不止一位 parent 。联系人可以是 parent 和 child (孙子)。

联系人之间的关系映射在表“parents_and_children”中。

"contacts" table
+----+------+
| id | name |
+----+------+
| 1 | p1 |
| 2 | p2 |
| 3 | p3 |
| 4 | p4 |
| 5 | p5 |
| 6 | p6 |
+----+------+

"parents_and_children" table
+----+-----------+----------+
| id | parent_id | child_id |
+----+-----------+----------+
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 3 | 4 |
| 4 | 5 | 2 |
| 5 | 5 | 3 |
| 6 | 5 | 6 |
+----+-----------+----------+

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 本身就是 p2 和 p3 的父级。

我不需要完整的解决方案。请给我指明方向,我会自己到达那里。到目前为止,没有任何效果。

最佳答案

您可以使用 GROUP_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

关于MySql Group By 同一张表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42516917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com