Brug af en CASE udtryk i WHERE klausul burde gøre tricket. Når du siger, at du ikke har brug for where-klausulen, hvis betingelsen ikke er opfyldt, så er alt, hvad du ønsker, en betingelse som WHERE 1 =1
, dvs. når betingelsen ikke er opfyldt, så returner alle rækker. Så du skal gøre betingelsen ikke opfyldt som altid TRUE .
For eksempel,
Jeg har et medarbejderbord,
SQL> SELECT empno, ename, deptnr. 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 1014 rækker>
Jeg vil vælge medarbejderoplysningerne, hvis afdelingen er 20, så brug where-klausulen ellers returner alle medarbejderoplysningerne, men filtrer den afdeling, der opfylder where-betingelsen.
SQL> VÆLG empno, ename, deptnr. 2 FRA emp 3 WHERE ename =4 CASE 5 WHEN deptno =20 6 SÅ 'SCOTT' 7 ANDES 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 7934 MILLER 1010 rækker valgt.SQL>
Så for afdeling 20 anvendes filteret af where-klausulen, og jeg får kun rækken for ename SCOTT, for andre returnerer det alle rækkerne.