上面是给定的数据表,我需要获取如下结果数据。
SELECT ID
FROM
(
SELECT ID, PARENT_ID
FROM ECOLI_DATA
WHERE PARENT_ID IN (SELECT ID FROM ECOLI_DATA WHERE PARENT_ID
IN (SELECT ID FROM ECOLI_DATA WHERE PARENT_ID IS NULL))
) AS aa
ORDER BY 1;
我要求其他人得到像上面代码一样的答案,但我无法弄清楚这段代码的过程(子查询部分)。我弄清楚第一个子查询发生了什么,但从第二个子查询开始,我迷失了。 谁能解释一下详细过程吗?
使用子查询从内到外工作。
所以第一个是
SELECT ID FROM ECOLI_DATA WHERE PARENT_ID IS NULL
这将返回 2 个 ID(1 和 2)
现在将使用传递给 IN 的值 1 和 2 来运行
SELECT ID FROM ECOLI_DATA WHERE PARENT_ID IN(1,2)
所以这会返回 3 个 ID(3,4 和 5)
现在该查询已运行
SELECT ID, PARENT_ID FROM ECOLI_DATA WHERE PARENT_ID IN(3,4,5)
所以这回来了
ID PARENT_ID
6 4
7 3
现在最外层的查询在之前的结果集上运行
SELECT ID
导致
ID
6
7
实际上,您可以从这个嵌套中删除一个查询并获得相同的结果
SELECT ID FROM ECOLI_DATA
WHERE PARENT_ID IN
(SELECT ID FROM ECOLI_DATA WHERE PARENT_ID IN
(SELECT ID FROM ECOLI_DATA WHERE PARENT_ID IS NULL))
) AS aa
ORDER BY 1;