小编典典

在where条件中具有所有必需值的Oracle SQL查询

sql

我想在ORACLE中编写一个选择查询,该查询仅在条件存在的情况下给出的所有值都将返回记录。例如

select * from emp where empid in (7521,7566,7698)

现在,我想编写此查询,以便仅在所有3个empid存在时才返回值。它将类似于AND条件,即empid = 7521和empid = 7566以及empid
=7698。如果不存在任何一个值,则此查询不应获取任何行。


阅读 145

收藏
2021-04-28

共1个答案

小编典典

Lukas版本的扩展,您只需编写一次ID:

with emp_ids as (
   select 7521 as eid from dual
   union all 
   select 7566 from dual
   union all
   select 7698 from dual
)
select * 
from (
  select emp.*, 
         count(*) over() as cnt
  from emp_new emp
  where empid in (select eid from emp_ids)
)
where cnt = (select count(*) from emp_ids);

在这些情况下,我总是会错过其他DBMS中可用的标准行构造函数,在这里我可以简单地编写VALUES (7521), (7566), (7698)以生成具有所需值的虚拟表,而无需使用DUAL …

2021-04-28