Oracle MINUS оператор и удалить - PullRequest
0 голосов
/ 10 мая 2019

Вы можете вставить записи в таблицу B, если они находятся в таблице A

insert into B
select * from A
minus
select * from B

Как удалить записи, которые находятся в B, а не в A?

select * from B
minus 
select * from A

Какудалить записи?

Предполагается, что у нас нет первичного или уникального ключа.

Вы можете сделать это так:

delete from a2
where (COLUMN1, COLUMN2, COLUMN3, ...) in (select * from a2
                     minus
                    select * from a1);

Это работает,но вы должны ввести имена столбцов в предложении where.Не можете сделать удаление таким красивым способом, как insert into select * from ...?

1 Ответ

1 голос
/ 10 мая 2019

Если вы хотите продолжить свой текущий подход, вам следует не использовать select * в вашем минус-запросе.Скорее, вы должны всегда явно перечислять столбцы, которые вы хотите использовать.

Но я бы использовал здесь запрос EXISTS:

DELETE
FROM tableB b
WHERE NOT EXISTS (SELECT 1 FROM tableA a
                  WHERE a.col1 = b.col1 AND
                        a.col2 = b.col2 AND
                        a.col3 = b.col3 AND ...);

BestПрактика продвижения вперед будет иметь столбец первичного ключа в таблице А.Тогда вам нужно будет только проверить этот столбец по таблице B на уникальность.

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