Я запутался в следующем SQL (возможно, тривиальном) на OUTER JOIN.
У меня есть 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 JOINs?
where e.deptno is null- person chetan   schedule 07.07.2013join on and or etc? - person Jim   schedule 07.07.2013join- person Jim   schedule 07.07.201340, nullсоздается внешним соединением. Его нет в таблицах. - person ypercubeᵀᴹ   schedule 07.07.2013