我是 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/