To zapytanie dołącza rekordy z tabeli EMP albo tabeli DEPT lub stole SPECIAL_OPS, w zależności od wartości 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>
Zawarłem filtr EMP.DEPTNO w klauzulach ON. Może to być niepotrzebne, jeśli dane w tabelach są wyłączne (tj. DEPTNO = 30 może dołączyć tylko do DEPT, a DEPTNO = 50 może dołączyć tylko do SPECIAL_OPS). Jeśli jednak identyfikator może pojawić się w obu tabelach, to również musi być wyraźny. Poza tym, podkreślanie naszego zamiaru jest zawsze dobrą praktyką. Poza wszystkim innym nie możemy mieć pewności co do przyszłego stanu danych.
To może być warta ponownego rozpatrzenia projekt bazy danych. Jeśli zarówno tabela 2, jak i tabela 3 mają takie same lub podobne schematy, dlaczego są to różne tabele? –
Warto ponownie przeanalizować Twój przykład. Wygląda na to, że miksuje się alias/tablename. – jva
Po prostu dołącz do OBU tabeli i przenieś część CASE do listy kolumn – user38123