Sử dụng CASE trong WHERE mệnh đề nên làm thủ thuật. Khi bạn nói rằng bạn không cần mệnh đề where nếu điều kiện không được đáp ứng, thì tất cả những gì bạn muốn là một điều kiện như WHERE 1 = 1
, tức là khi điều kiện không được đáp ứng thì trả về tất cả các hàng. Vì vậy, bạn cần đặt điều kiện không được đáp ứng luôn là ĐÚNG .
Ví dụ:
Tôi có một bảng nhân viên,
SQL> SELECT empno, ename, deptno
2 FROM emp;
EMPNO ENAME DEPTNO
---------- ---------- ----------
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7788 SCOTT 20
7839 KING 10
7844 TURNER 30
7876 ADAMS 20
7900 JAMES 30
7902 FORD 20
7934 MILLER 10
14 rows selected.
SQL>
Tôi muốn chọn chi tiết nhân viên, nếu phòng ban là 20 thì hãy sử dụng mệnh đề where khác trả về tất cả chi tiết nhân viên, nhưng lọc phòng ban đáp ứng điều kiện where.
SQL> SELECT empno, ename, deptno
2 FROM emp
3 WHERE ename =
4 CASE
5 WHEN deptno = 20
6 THEN 'SCOTT'
7 ELSE ename
8 END
9 /
EMPNO ENAME DEPTNO
---------- ---------- ----------
7499 ALLEN 30
7521 WARD 30
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7788 SCOTT 20
7839 KING 10
7844 TURNER 30
7900 JAMES 30
7934 MILLER 10
10 rows selected.
SQL>
Vì vậy, đối với bộ 20, bộ lọc được áp dụng theo mệnh đề where và tôi chỉ nhận được hàng cho ename SCOTT, đối với các bộ khác, bộ lọc trả về tất cả các hàng.