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

请求解释自关联Correlated Query:同表内外查询的对比逻辑

同表相关子查询的对比逻辑解析

核心逻辑

相关子查询的关键在于内查询会直接引用外查询的字段,在同表场景下,我们通过给表设置不同别名(比如示例里的e和m),把同一张表拆成两个逻辑上独立的表来使用:外查询逐行遍历表中记录,内查询则针对当前遍历到的这条记录,去表中匹配对应的关联数据,完成条件对比。

拆解你的SQL语句

先看完整SQL代码:

SELECT e.name AS Employee
FROM Employee e
WHERE e.salary > (
    SELECT m.salary 
    FROM Employee m
    WHERE m.id = e.managerId
);

步骤1:外查询遍历员工数据

外查询用别名e指代Employee表,会逐行取出每一条员工的完整数据(包含name、salary、managerId等字段)。

步骤2:内查询匹配对应经理的薪资

对于外查询当前取出的这条员工记录,内查询用别名m再次调用Employee表,通过m.id = e.managerId这个条件,精准定位到该员工直属经理的记录,然后提取经理的薪资m.salary。

步骤3:对比筛选符合条件的员工

外查询将当前员工的薪资e.salary和内查询返回的经理薪资做比较,如果员工薪资更高,就把该员工的姓名e.name加入最终结果集。

直观示例说明

假设Employee表有以下数据:

idnamesalarymanagerId
1老王8000NULL
2张三90001
3李四70001
  • 外查询遍历到张三(id=2)时,e.managerId为1,内查询找到id=1的老王,取出薪资8000。9000>8000,因此张三会被纳入结果。
  • 外查询遍历到李四(id=3)时,e.managerId为1,内查询取出老王的8000,7000<8000,因此李四不会被选中。
  • 老王的managerId为NULL,内查询找不到对应记录,因此不会被纳入结果。

最终输出结果:

Employee
张三

内容的提问来源于stack exchange,提问作者Whistler marc Vicky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 12:22:28