2

有人可以解释以下查询之间的区别。子查询中的联接看起来相同,但第一个运行正常,第二个运行正常。在第二个查询中,子查询似乎无法访问别名表 e。

QUERY1

select    e.ename
          ,e.deptno
          ,(
                select count(*)
                from emp d
                where e.deptno = d.deptno
          ) dept_cnt
from      emp e
order by 2;

查询 2

select    e.ename
          ,e.deptno
          ,(
                select count(*)
                from emp    d
                inner join  e
                    ON      d.deptno = e.deptno
           ) dept_cnt
from      emp e
order by 2;
4

3 回答 3

5

第二个查询语法错误:

inner join  e
                    ON      d.deptno = e.deptno

无法使用表别名进行内部连接。

于 2012-05-08T10:08:57.407 回答
0

查询 2 是无效的 sql。关键字from,并且join必须后跟一个表名和可选的别名。

查询 2 的可能修复(但查询 1 更好)

select  e.ename
       ,e.deptno
       ,(
           select count(*)
           from emp    d
           inner join emp e1
             ON  d.deptno = e1.deptno
             AND e1.deptno = e.deptno
        ) dept_cnt
from    emp e 
order by 2;
于 2012-05-08T10:12:02.947 回答
0

子查询只能使用来自更高级别表的标量值,这些表本身不在范围内——您可以将子查询视为对更高级别表的每一行执行的循环。

于 2012-05-08T10:12:34.677 回答