我想在ORACLE中编写一个选择查询,该查询仅在条件存在的情况下给出的所有值都将返回记录。例如
select * from emp where empid in (7521,7566,7698)
现在,我想编写此查询,以便仅在所有3个empid存在时才返回值。它将类似于AND条件,即empid = 7521和empid = 7566以及empid =7698。如果不存在任何一个值,则此查询不应获取任何行。
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 …
VALUES (7521), (7566), (7698)