Oracle 条件 where 子句

标签 oracle oracle11g case conditional-statements where

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

      select e.emp_id, emp.admin_user from employees e

if emp.admin != 'Y'

then

query run with where clause

else

query run without where clause ?

最佳答案

使用 案例 中的表达式哪里条款应该可以解决问题。当你说如果条件不满足你不需要 where 子句,那么你想要的只是一个像 WHERE 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>

我想选择员工详细信息,如果部门是 20 则使用 where 子句 else 返回所有员工详细信息,但过滤满足 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>

因此,对于部门 20,过滤器由 where 子句应用,我只得到 ename SCOTT 的行,对于其他部门,它返回所有行。

关于Oracle 条件 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29027425/

相关文章:

sql - Oracle中如何识别变量是否包含换行符

mysql - 我可以这样使用 MySql CASE 吗?

Java 检查字符串可变长度(带子字符串)

sql - 来自另一个ORACLE数据库的查询表

php - 多用户的批准和拒绝

linux - 是不是oracle错误导致linux系统ping不通ssh不通?

sql - 如何将权限授予 Oracle SCHEMA 上的 ROLE

MySQL:检查查询中是否存在数据

SQL 查询 : how to translate IN() into a JOIN?

oracle - 从数据库读取整数返回 float