问答详情
源自:4-10 [Oracle] 主查询和子查询的执行顺序

子查询中的 e.deptno如果替换成 emp.deptno得到的结果为什么不一样?

1)select empno,ename,sal, (select avg(sal) from emp where deptno=e.deptno) avgsal

   from emp e

   where sal > (select avg(sal) from emp where deptno=e.deptno)

2)select empno,ename,sal, (select avg(sal) from emp where deptno=emp.deptno) avgsal

   from emp e

   where sal > (select avg(sal) from emp where deptno=emp.deptno)


提问者:King_WJK 2019-01-18 09:37

个回答

  • 慕斯卡6169147
    2020-11-30 14:37:45

    from emp e

       where sal > (select avg(sal) from emp where deptno=emp.deptno)

    因为 e 表是from emp e 这个表  emp.deptno  select avg(sal) from emp 是指这个表


  • 税海浮沉
    2020-02-21 20:19:00

    主查询和子查询用的同一张表,子查询语句条件中的deptno=emp.deptno 相当于笛卡尔积了。如果子查询和主查寻每张表都有别名,就不存在这种问题了。

  • puikiri
    2019-02-11 16:58:05

    就近原则,如果子查询内有符合 ‘emp’ 的 表/集合,就采用子查询内的,所以第二条语句的emp.deptno用的是子查询内的而不是子查询外的。