Usando un CASO expresión en el DONDE cláusula debe hacer el truco. Cuando dice que no necesita la cláusula where si no se cumple la condición, entonces todo lo que desea es una condición como WHERE 1 = 1
, es decir, cuando no se cumple la condición, se devuelven todas las filas. Por lo tanto, debe hacer que la condición de no cumplido siempre sea VERDADERA .
Por ejemplo,
Tengo una mesa de empleados,
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>
Quiero seleccionar los detalles del empleado, si el departamento es 20, use la cláusula where; de lo contrario, devuelva todos los detalles del empleado, pero filtre el departamento que cumple con la condició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>
Entonces, para el departamento 20, el filtro se aplica por la cláusula where, y obtengo solo la fila para el nombre SCOTT, para otros devuelve todas las filas.