有人可以解释以下查询之间的区别。子查询中的连接看起来相同,但第一个运行正常,第二个运行没有。在第二个查询中,子查询似乎无法访问别名表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;
QUERY 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;
答案 0 :(得分:5)
第二个查询语法错误:
inner join e
ON d.deptno = e.deptno
无法使用表别名进行内部联接。
答案 1 :(得分: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;
答案 2 :(得分:0)
子查询只能使用来自更高级别表的标量值,这些表本身不在范围内 - 您可以将子查询视为为更高级别表的每一行执行的循环。