Verwenden eines CASE Ausdruck im WHERE Klausel sollte den Trick tun. Wenn Sie sagen, Sie brauchen die where-Klausel nicht, wenn die Bedingung nicht erfüllt ist, dann brauchen Sie nur eine Bedingung wie WHERE 1 = 1
, d. h. wenn die Bedingung nicht erfüllt ist, werden alle Zeilen zurückgegeben. Also müssen Sie die nicht erfüllte Bedingung wie immer WAHR machen .
Zum Beispiel
Ich habe eine Mitarbeitertabelle,
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>
Ich möchte die Mitarbeiterdetails auswählen, wenn die Abteilung 20 ist, dann verwenden Sie die Where-Klausel, sonst geben Sie alle Mitarbeiterdetails zurück, aber filtern Sie die Abteilung, die die Where-Bedingung erfüllt.
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>
Für Abteilung 20 wird der Filter also durch die where-Klausel angewendet, und ich erhalte nur die Zeile für ename SCOTT, für andere werden alle Zeilen zurückgegeben.