我有一个要求,我需要编写一个select查询,如果where子句中的条件满足所有值,它将返回记录。
例如:
我有员工表,有三个reocords,我们假设Name是一列(有三个记录' A',' B',' C')
select * from emp where Name in ('A', 'B', 'D')
---它不应该返回任何值,因为D值不存在,请建议我选择查询
答案 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值。