需要一些关于 MySQL where ... in ... 子查询的解释

问题描述 投票:0回答:1

tableofdata

上面是给定的数据表,我需要获取如下结果数据。

result


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;

我要求其他人得到像上面代码一样的答案,但我无法弄清楚这段代码的过程(子查询部分)。我弄清楚第一个子查询发生了什么,但从第二个子查询开始,我迷失了。 谁能解释一下详细过程吗?

mysql subquery
1个回答
0
投票

使用子查询从内到外工作。

所以第一个是

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;
© www.soinside.com 2019 - 2024. All rights reserved.