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

Sql 如何编写select查询,如果where子句中的条件满足所有值,该查询将返回记录,sql,oracle,Sql,Oracle,我需要编写一个select查询,如果where子句中的条件满足所有值,该查询将返回记录 例如: 我有一个employee表,有三条记录,假设Name是一列,有三条记录‘A’、‘B’、‘C’ 从emp中选择*from Name in'A'、'B'、'D'-不应返回任何值,因为不存在D值,请建议我在中使用select查询将返回满足任何条件的行,就像使用或一样 select * from emp where Name in ('A', 'B', 'D') 等于: select * from emp

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

例如:

我有一个employee表,有三条记录,假设Name是一列,有三条记录‘A’、‘B’、‘C’


从emp中选择*from Name in'A'、'B'、'D'-不应返回任何值,因为不存在D值,请建议我在中使用select查询将返回满足任何条件的行,就像使用或一样

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

select * from emp where Name = 'A' OR Name = 'B' OR Name = 'D'
如果您的emp表只有“A”、“B”和“C”,则结果应该是“A”和“B”行

如果您希望结果显示无记录或所有记录,那么使用单个SQL select并不容易,您必须使用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部分只是为了返回一个空数据集,假设name列中没有任何记录具有空值。

您使用的是哪个DBMS?您是否有另一个字段具有相同的name 3个不同值?我没有任何其他字段HMM,你能解释一下你的查询想要实现什么吗?我的结果集中仍然有2条记录,因为我的表中没有D值,我不应该得到任何记录,但是你的查询返回的是记录“A”和“B”