Oracle条件条件where子句

use*_*229 3 oracle case where oracle11g conditional-statements

有没有什么方法可以编写具有以下功能的查询,可以添加where子句作为条件方式,

      select e.emp_id, emp.admin_user from employees e
Run Code Online (Sandbox Code Playgroud)

如果emp.admin!='Y'

然后

使用where子句运行查询

其他

没有where子句的查询运行?

Lal*_*r B 9

WHERE子句中使用CASE表达式应该可以解决问题。如果您说如果不满足条件就不需要where子句,那么您所需要的只是一个条件,例如,即当不满足条件时返回所有行。因此,您需要将不满足条件设为TRUEWHERE 1 = 1

例如,

我有一个员工桌

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>
Run Code Online (Sandbox Code Playgroud)

我要选择员工详细信息,如果部门为20,则使用where子句,否则返回所有员工详细信息,但过滤满足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>
Run Code Online (Sandbox Code Playgroud)

因此,对于部门20,该过滤器由where子句应用,并且我仅获得ename SCOTT的行,对于其他人,它返回所有行。