Этот запрос объединяет записи из таблицы EMP в таблицу DEPT или таблицу SPECIAL_OPS, в зависимости от значения EMP.DEPTNO ...
SQL> select e.ename
2 , e.job
3 , e.deptno
4 , coalesce(d.dname, s.dname) as dname
5 from emp e
6 left outer join dept d
7 on ( e.deptno = 30
8 and e.deptno = d.deptno )
9 left outer join special_ops s
10 on ( e.deptno != 30
11 and e.deptno = s.deptno )
12 where e.deptno in (30,50)
13 order by e.deptno, e.empno
14 /
ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
VAN WIJK SALESMAN 30 SALES
PADFIELD SALESMAN 30 SALES
BILLINGTON SALESMAN 30 SALES
SPENCER MANAGER 30 SALES
CAVE SALESMAN 30 SALES
HALL CLERK 30 SALES
VERREYNNE PLUMBER 50 SKUNKWORKS
FEUERSTEIN PLUMBER 50 SKUNKWORKS
8 rows selected.
SQL>
Я включил фильтр для EMP.DEPTNO в предложениях ON. Это может быть ненужным, если данные в таблицах являются исключительными (то есть DEPTNO = 30 может присоединиться только к DEPT, а DEPTNO = 50 может присоединиться только к SPECIAL_OPS). Однако, если идентификатор может появиться в обеих таблицах, это также должно быть явным. Кроме того, разъяснение наших намерений всегда является хорошей практикой. Помимо всего прочего, мы не можем быть уверены в будущем состоянии данных.