gpt4 book ai didi

mysql - SQL 查询仅选择具有孙子项的条目

转载 作者:行者123 更新时间:2023-11-29 12:06:45 25 4
gpt4 key购买 nike

昨天我问了this question关于仅选择孙子条目。我花了一段时间,但我终于弄清楚如何做我想做的事。

现在,我需要做点别的事情:只选择祖 parent 条目(“祖 parent ”,我的意思是没有 parent 的人,即他们的parent_id为0),但只选择有孙子的人,无论他们是否有 child 。

这是我的 table :

+-----+-------------+-----------+
| id | name | parent_id |
+-----+------------+-----------+
| 1 | Bob | 3 |
| 2 | John | 5 |
| 3 | Larry | 4 |
| 4 | Kevin | 0 |
| 5 | Kyle | 0 |
| 6 | Jason | 5 |
| 7 | Mildred | 4 |
| 8 | Mabel | 6 |
| 9 | Amber | 4 |
| 10 | Devon | 5 |
| 11 | Zack | 0 |
| 12 | Alfred | 11 |
| 13 | Robert | 11 |
| 14 | Keith | 11 |
| 15 | David | 0 |
| 16 | Wilbur | 15 |
+-----+------------+-----------+

这就是我想要返回的结果:

+---------+
| name |
+---------+
| Kevin |
| Kyle |
+---------+

只有那三个 parent 。我不希望大卫或扎克出现在结果中,因为他们没有孙子。

要获得所有祖 parent ,我可以简单地这样做:

SELECT name FROM people WHERE parent_id = 0

但我需要一个只能选择父 ID 为零并且是祖 parent 的条目的查询。

( http://sqlfiddle.com/#!9/b1a818/3 )

最佳答案

我认为你需要双重 self JOIN才能达到孙级:

SELECT DISTINCT p1.name 
FROM people AS p1
INNER JOIN people AS p2 ON p1.id = p2.parent_id
INNER JOIN people AS p3 ON p2.id = p3.parent_id
WHERE p1.parent_id = 0

INNER JOIN 将过滤掉未达到父子层次结构下两级的任何记录。

Demo here

关于mysql - SQL 查询仅选择具有孙子项的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31350911/

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