当前位置: 首页 > 面试题库 >

SQL查询只选择孙子孙

丌官信厚
2023-03-14
问题内容

我对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查询?


问题答案:

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


 类似资料:
  • 问题内容: 我有一个如下查询: 结果如下:中心名称和交换数量 我喜欢从此结果(第二行)中选择最大值,除了排序和选择第一行之外,还有谁能帮助我进行MAX查询。 问题答案: 那应该工作

  • 问题内容: 我的SQL代码如下: 等效的linq表达式是什么? 问题答案: 我第一次尝试在 来源 LINQ to SQL中的NOT IN子句

  • 问题内容: 我有一个Oracle表,其中包含一组范围(RangeA和RangeB)。这些列是varchar,因为它们可以同时容纳数字和字母数字值,如以下示例所示: 我需要执行一个查询,该查询仅返回具有数值的记录,并对该查询执行Count。到目前为止,我已经尝试过使用两个不同的查询来做到这一点,但没有任何运气: 查询1: 查询2: 子查询工作正常,因为我得到的两个记录都只有数字值,但是查询的COUN

  • 我刚开始冬眠。我有两张桌子,有一对多的关系。有两个表格: 这是一个父类,它与图像表有一对多关系 现在我想使用父类的id(即:pashminaId)从类中选择一个 如: 选择IMAGE_NAMETBL_IMAGEPASHMINA_ID='some_digit'; 我怎么能在图像类中传递pashminaId,因为没有它只有一个父类的对象创建。 那么,我如何在Hibernate中实现这一点? 谢谢!希望

  • 主要内容:1.带有Select语句的子查询,2.带有INSERT语句的子查询,3.带有UPDATE语句的子查询,4.带有DELETE语句的子查询子查询是另一个SQL查询中的查询,并嵌入在子句中。 重要规则: 子查询可以放在许多SQL子句中,如子句,子句,子句。 可以将子查询与,,,语句以及,,, ,,,等运算符一起使用。 子查询是另一个查询中的查询。外部查询称为主查询,内部查询称为子查询。 子查询位于比较运算符的右侧。 子查询括在括号中。 在子查询中,不能使用命令。 但命令可用于执行与命令相同的

  • 主要内容:语法,示例子查询也称“内部查询”或者“嵌套查询”,是指将一个 SELECT 查询(子查询)的结果作为另一个 SQL 语句(主查询)的数据来源或者判断条件。 子查询可以嵌入 SELECT、INSERT、UPDATE 和 DELETE 语句中,也可以和 =、<、>、IN、BETWEEN、EXISTS 等运算符一起使用。 子查询常用在 WHERE 子句和 FROM 子句后边: 当用于 WHERE 子句时,根据不同