mysql - SQL查询只选择孙子

标签 mysql 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 是谁。如果他们的表上没有 parent ,那么他们的 parent_id 就是 0。

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

很容易得到祖 parent (Larry 和 Kevin),我可以做这个查询:

SELECT name FROM people WHERE parent_id = 0

但是当谈到生 child (John、Larry、Jason 和 Mildred)和孙子(Bob 和 Mabel)时,我迷路了。

在英语中,这将是获取 child 的过程:“从表中获取所有结果。对于每个结果,查看它们的父 ID。在表中找到将其作为其 ID 的结果。参见 < em>那个人的 id,如果它是 0,那么原来的人是一个 child 。将他们添加到我们将要显示的列表中。"

对于孙子们,和上面一样,只是多了一个步骤。

这有意义吗?如何将上述过程编写为 SQL 查询?

最佳答案

这可以使用简单的 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

关于mysql - SQL查询只选择孙子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31327393/

相关文章:

c# - 数据库触发器还是代码中的常用方法?

SQL - 按顺序选择父记录和子记录

MySQL EVENT 不执行

mysql - 从多个mysql表中选择匹配的数据+版本5.0

mysql - 在 MySQL 中的同一字段上使用多个 group_concat 和 group by

mysql - 在特定条件下连接两个表

sql - 使用PL/SQL函数获取员工薪酬记录

php - 如何将父表当前主键的值插入到子表中

mysql - 连接具有不同可变大小的 ID 的表

java - 将日期插入sql数据库