昨天我问this question关于只选择孙子条目的问题。我花了一段时间,但我终于想出了如何做我想做的事。
现在,我需要做一些其他的事情:只选择祖父母的条目(“祖父母”,我的意思是没有父母的人,即他们的parent_id是0),但只有那些有孙子的人,不管他们是否有孩子。
这是我的表格:
+-----+-------------+-----------+
| 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 |
+---------+
只有那三个父母。我不希望David或Zack成为结果,因为他们没有孙子。
为了得到所有的祖父母,我可以这样做:
SELECT name FROM people WHERE parent_id = 0
但我需要一个只能选择父ID为零并且是祖父母的条目的查询。
答案 0 :(得分:1)
我认为你需要一个双重自我 - 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
将过滤掉不会在父子层级中达到两级的任何记录。