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

来源:4-10 [Oracle] 主查询和子查询的执行顺序

King_WJK

2019-01-18 09:37

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)


写回答 关注

3回答

  • 慕斯卡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用的是子查询内的而不是子查询外的。

    180416

    还有就近原则,稳定的吗?

    2019-04-24 17:34:39

    共 1 条回复 >

Oracle高级查询

数据库开发中应用广泛的高级查询,本教程通过大量的案例详细讲解

62883 学习 · 144 问题

查看课程

相似问题