Oracle SQL-запрос со всеми обязательными значениями в условии условия - PullRequest
2 голосов
/ 28 октября 2011

Я хочу написать один запрос на выборку в ORACLE, который будет возвращать записи только в том случае, если все значения, указанные в условии, существуют. Э.Г.

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

Теперь я хочу написать этот запрос, чтобы он возвращал значение ТОЛЬКО, когда все 3 empid существуют. Это будет похоже на условие AND, т.е. empid = 7521, empid = 7566 и empid = 7698. Если какое-либо одно значение не существует, этот запрос не должен извлекать какую-либо строку.

Ответы [ 2 ]

4 голосов
/ 28 октября 2011

Запустите тот же запрос снова, как вложенный выбор, и посчитайте его записи

select * from emp 
where empid in (7521, 7566, 7698)
and 3 = (select count(*) from emp where empid in (7521, 7566, 7698))

В качестве альтернативы используйте аналитическую функцию для исходного результата и проверьте это:

select * from (
  select emp.*, count(*) over() as cnt
  from emp where empid in (7521, 7566, 7698)
)
where cnt = 3
3 голосов
/ 28 октября 2011

Расширение версии Lukas, где вам нужно писать идентификаторы только один раз:

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);

В этих случаях мне всегда не хватает стандартного конструктора строк, доступного в других СУБД, где я могу просто написатьVALUES (7521), (7566), (7698) для создания виртуальной таблицы с желаемыми значениями без необходимости использовать DUAL ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...