我对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 子句时,根据不同