Можем ли мы удалить дубликаты строк в таблице, используя Any Join? - PullRequest
0 голосов
/ 02 марта 2020

Предположим,

T1:

Col1 Col2
---- ----
   1 a
   1 b
   2 c
   3 d

T2:

Col1 Col2
---- ----
   1 b
   2 c
   3 d

Что такое точный запрос для удаления дублирующихся строк с помощью Join.

Ответы [ 3 ]

0 голосов
/ 02 марта 2020

Попробуйте это:

delete from t1 a where not exists(select * from t2 b where a.col1=b.col1 and a.col2=b.col2);
0 голосов
/ 02 марта 2020

Если вы хотите, чтобы строки T1, которые не существуют в T2 с объединением, используйте LEFT JOIN:

select T1.*
from T1 left join T2
on T2.col1 = T1.col1 and T2.col2 = T1.col2
where T2.col1 is null

Если вы хотите, чтобы строки, которые не являются общими в 2 таблицы, которые вы можете сделать с помощью FULL OUTER JOIN:

select
  coalesce(T1.col1, T2.col1) col1,
  coalesce(T1.col2, T2.col2) col2
from T1 full outer join T2
on T2.col1 = T1.col1 and T2.col2 = T1.col2
where T1.col1 is null or T2.col1 is null

Условие в предложении WHERE гарантирует, что будут возвращены только строки, принадлежащие одной, а не другой из таблиц. Смотрите демо . Результаты:

> COL1 | COL2
> ---: | :---
>    1 | a   
0 голосов
/ 02 марта 2020
select * from T1
MINUS
select * from T2

Это даст вам только строки T1, которых нет в T2.

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