如果where子句中的条件满足所有值,则如何编写将返回记录的select查询

时间:2014-07-14 10:49:32

标签: sql oracle

我有一个要求,我需要编写一个select查询,如果where子句中的条件满足所有值,它将返回记录。

例如:

我有员工表,有三个reocords,我们假设Name是一列(有三个记录' A',' B',' C')

select * from emp where Name in ('A', 'B', 'D') ---它不应该返回任何值,因为D值不存在,请建议我选择查询

1 个答案:

答案 0 :(得分:0)

使用IN将返回满足任何条件的行,就像使用OR一样。

select * from emp where Name in ('A', 'B', 'D')

等于:

select * from emp where Name = 'A' OR Name = 'B' OR Name = 'D'

如果你的emp-table只有'A','B'和'C',结果应该是:'A'和'B'行。

如果您希望结果不显示任何记录或所有记录,单个SQL选择并不容易,您将不得不使用Oracle / PLSQL if-then-else,如下所示:

IF (select count(*) from emp where name in ('A', 'B', 'C')) = 3 THEN
    select * from emp where name in ('A', 'B', 'C')
ELSE
    select * from emp where name is null
END IF;

此处的else-part仅用于返回空数据集,假设名称列中没有任何记录具有NULL值。