Esta consulta se une con los registros de la tabla EMP a cualquiera de la tabla DEPT o la mesa SPECIAL_OPS, dependiendo del valor de 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>
He incluido el filtro en EMP.DEPTNO en las cláusulas ON. Esto podría ser innecesario si los datos en las tablas son exclusivos (es decir, DEPTNO = 30 solo podría unirse a DEPT y DEPTNO = 50 solo podría unirse a SPECIAL_OPS). Sin embargo, si el identificador puede aparecer en ambas tablas, también debe ser explícito. Además, hacer que nuestra intención sea clara es siempre una buena práctica. Aparte de cualquier otra cosa, no podemos estar seguros sobre el estado futuro de los datos.
Podría valer la pena volver a examinar su diseño de base de datos. Si tanto table2 como table3 tienen los mismos esquemas o esquemas similares, ¿por qué son tablas diferentes? –
También vale la pena volver a examinar su ejemplo. Parece haber una confusión de alias/nombre de tabla. – jva
Solo tiene que unirse a AMBAS tablas y mover la parte CASE a la lista de columnas – user38123