#oracle #sql
Есть две таблицы - А и В. create table a ( KEY1 number ); create table b ( KEY2 number, KEY3 number ); Нужно проверить, что для каждой записи таблицы А нет записей в таблице B по условию A.KEY1 = B.KEY2. Если же записи есть, то для каждой такой записи таблицы В проверить что нет записей в таблице А по условию В.KEY3 = A.KEY1. Реализовал так: SELECT * FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE A.KEY1 = B.KEY2 AND B.KEY3 NOT IN (SELECT KEY1 FROM A)) Есть другие варианты выполнить этот же запрос?
Ответы
Ответ 1
select * from A where key1 not in(select key2 from B) union all ( select * from A where key1 in(select key2 from B) intersect select * from a where key1 not in(select key3 from b) )Ответ 2
Для такой комбинации данных: A | B key1 | key2 key3 1 | 3 2 2 | 4 7 3 | 5 8 ожидается a.Key1 1 и 2, т.е две строчки. Правильно надо так: select * from a where not exists (select 1 from b where key1=key2) union all select * from a where exists ( select 1 from b where a.key1=b.key2 and not exists (select 1 from a aa where aa.key1=b.key3) );
Комментариев нет:
Отправить комментарий