You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求详解MySQL WHERE IN多层嵌套子查询的执行过程

三层嵌套WHERE IN子查询SQL执行流程解析

这段SQL的核心是从ECOLI_DATA表中筛选出第三代大肠杆菌的ID(以无父节点的为第一代,依次递推),下面逐层拆解执行逻辑:

1. 最内层子查询(定位第一代节点)

SELECT ID FROM ECOLI_DATA WHERE PARENT_ID IS NULL

这一步直接筛选出所有没有父节点的大肠杆菌(即第一代),返回的是这类节点的ID集合。比如原表中PARENT_ID为NULL的记录ID是1,这里就返回结果集合 (1)。

2. 中间层子查询(定位第二代节点)

SELECT ID FROM ECOLI_DATA WHERE PARENT_ID IN (最内层子查询结果)

这一步把最内层得到的第一代ID作为父ID条件,筛选出所有父节点属于第一代的大肠杆菌(即第一代的直接子节点,也就是第二代),返回第二代节点的ID集合。比如最内层返回(1),这里就会找出所有PARENT_ID=1的记录,假设对应ID是2和3,返回结果集合 (2, 3)。

3. 外层子查询(定位第三代节点)

SELECT ID, PARENT_ID FROM ECOLI_DATA WHERE PARENT_ID IN (中间层子查询结果)

这一步用中间层得到的第二代ID作为父ID条件,筛选出所有父节点属于第二代的大肠杆菌(即第二代的直接子节点,也就是第三代),返回这些第三代节点的ID和对应的父ID。比如中间层返回(2,3),这里就会找出PARENT_ID=2或3的记录,假设对应ID是4、5、6,返回的临时表aa内容如下:

IDPARENT_ID
42
52
63

4. 最终结果输出

SELECT ID FROM aa ORDER BY 1;

这一步从临时表aa中只取出ID列,并且按第一列(也就是ID列)升序排序,最终得到第三代大肠杆菌的ID列表:4, 5, 6。

内容的提问来源于stack exchange,提问作者DHK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:42:08