Truy vấn này gia nhập các bản ghi từ bảng EMP cho một trong hai bảng DEPT hoặc bảng SPECIAL_OPS, tùy thuộc vào giá trị của 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>
Tôi đã bao gồm bộ lọc trên EMP.DEPTNO trong mệnh đề ON. Điều này có thể không cần thiết nếu dữ liệu trong các bảng là độc quyền (ví dụ: DEPTNO = 30 chỉ có thể tham gia vào DEPT và DEPTNO = 50 chỉ có thể tham gia vào SPECIAL_OPS). Tuy nhiên, nếu số nhận dạng có thể xuất hiện trong cả hai bảng thì nó cũng rõ ràng. Bên cạnh đó, làm cho ý định của chúng tôi rõ ràng là luôn luôn thực hành tốt. Ngoài bất cứ điều gì khác, chúng tôi không thể chắc chắn về tình trạng dữ liệu trong tương lai.
Nó có thể là giá trị tái kiểm tra thiết kế cơ sở dữ liệu của bạn. Nếu cả bảng 2 và bảng 3 có cùng lược đồ hoặc các lược đồ tương tự, thì tại sao chúng lại là các bảng khác nhau? –
Nó cũng đáng xem xét lại ví dụ của bạn. Dường như có sự trộn lẫn bí danh/tablename. – jva
Chỉ cần tham gia vào hai bảng và di chuyển phần CASE vào danh sách cột – user38123