我在OUTER JOIN
的以下SQL(可能微不足道)中感到困惑。
我有2個小桌emp
和對員工及其部門的記錄deptno
即。他們的關係顯然是1-N
(但這是無關緊要的)。
我正在嘗試使用外連接來查找沒有員工在那裏工作的部門。所以我認爲正確的解決方案是OUTER JOIN
。
如果我做到以下幾點:爲什麼這個左外連接會產生錯誤的結果?
select d.deptno as d_deptno, e.deptno as e_deptno
from dept d left outer join emp e
on d.deptno = e.deptno;
我得到:
d_deptno e_deptno
10, 10
10, 10
10, 10
20, 20
20, 20
20, 20
20, 20
20, 20
30, 30
30, 30
30, 30
30, 30
30, 30
30, 30
40, null
好了,所以我想我需要的僅僅是最後一排,所以我只需要如下修改我的查詢:
select d.deptno as d_deptno, e.deptno as e_deptno
from dept d left outer join emp e
on d.deptno = e.deptno and e.deptno is null;
即我加了and e.deptno is null
。出於某種原因,如果我沒有e_deptno is null
查詢無法解析(爲什麼?)
但我得到的結果如下!
d_deptno e_deptno
10, null
20, null
30, null
40, null
爲什麼我會得到這些結果?我對OUTER JOIN
有什麼誤解?
你應該把在where子句'那裏e.deptno是null' – chetan
此外,您不能在條件中使用別名第二個條件。 – chetan
@chetan:所以我不能'加入和或等'? – Jim