小编典典

SQL查询只选择孙子孙

sql

我对SQL还是很陌生,试图绕过它,但是有点令人困惑。这是我正在使用的东西的简化版本。

我有这张桌子叫people

+----+------------+-----------+
| 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         |
+----+------------+-----------+

上表是人员清单。他们的parent_id列指的是他们的父母。如果表上没有父母,则他们的parent_id为0。

现在,我希望能够获得每组人的单独列表:祖父母,子女和孙子女。

很容易获得祖父母(拉里和凯文),我可以执行以下查询:

SELECT name FROM people WHERE parent_id = 0

但是当涉及到生子(约翰,拉里,杰森和米尔德雷德)和孙子(鲍勃和梅贝尔)时,我迷路了。

用英语来说,这就是获取孩子的过程:“从表中获取所有结果。对于每个结果,请查看其父ID。在具有该ID作为其ID的表中查找结果。请查看 该人的
ID,如果为0,则原始人是孩子。将其添加到我们要显示的列表中。”

对于孙子代来说,情况与上述相同,只是增加了一个步骤。

那有意义吗?如何在上面将我的过程编写为SQL查询?


阅读 167

收藏
2021-03-23

共1个答案

小编典典

这可以使用简单的方法解决JOIN

要选择子代列表:

SELECT c.name
FROM people p
JOIN people c ON c.parent_id = p.id
WHERE p.parent_id = 0

要选择孙子列表:

SELECT gc.name
FROM people p
JOIN people c ON c.parent_id = p.id
JOIN people gc ON gc.parent_id = c.id
WHERE p.parent_id = 0
2021-03-23