Страницы

Поиск по вопросам

вторник, 17 марта 2020 г.

Как по другому выполнить запрос в Oracle?

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

Комментариев нет:

Отправить комментарий