2

誰かが次のクエリの違いを説明できますか. サブクエリの結合は同じように見えますが、最初のクエリは正常に実行され、2 番目のクエリは正常に実行されません。2 番目のクエリでは、サブクエリがエイリアス テーブル e にアクセスできないようです。

クエリ1

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

2番目のクエリの構文が正しくありません。

inner join  e
                    ON      d.deptno = e.deptno

テーブルエイリアスを使用して内部結合を作成することはできません。

于 2012-05-08T10:08:57.407 に答える
0

クエリ 2 は無効な SQL です。キーワードfromjoinあり、その後にテーブル名とオプションのエイリアスが続く必要があります。

クエリ 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 に答える