удалить несопоставленные записи из первой таблицы - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть таблица 1 и таблица 2 - левое представление соединения, которое мы можем представить ниже:

enter image description here

Я хочу выполнить удаление наТаблица 1, как показано ниже - оранжевая подсвеченная часть должна быть удалена

enter image description here

Я пытался что-то подобное - но это не работает.

  delete from  MY_SCHEMA.TABLE1 DL   LEFT JOIN MY_SCHEMA.TABLE2  ERR_TB on 
   DL.DL_ID1 = ERR_TB.ERR_ID1    and  DL.DL_ID2 = ERR_TB.ERR_ID2   ;

Возможно ли выполнить удаление, как показано на рисунке-2.Я хочу удалить оранжевые записи из таблицы 1.

Любая помощь приветствуется, спасибо за продвижение :) Примечание - здесь нет PK и FK, у table1 и table2 есть - 2 одинаковых столбца - которые не являются интерсвязанные или зависимые

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Используйте NOT EXISTS, чтобы отфильтровать совпадающие строки.Остальные строки - это те, у которых нет аналога в table2, и они будут удалены.

DELETE FROM MY_SCHEMA.table1 DL 
WHERE NOT EXISTS (
    SELECT 1 FROM table2 ERR_TB 
     WHERE ERR_TB.id1 = DL.id1 
       AND ERR_TB.id2 = DL.id2
) 

Приведенный выше код основан на вашем утверждении join.Если вы хотите только ERR_TB.id1 = DL.id1 или ERR_TB.id2 = DL.id2, используйте 1 из следующих:

DELETE FROM MY_SCHEMA.table1 DL 
WHERE NOT EXISTS (
    SELECT 1 FROM table2 ERR_TB 
     WHERE ERR_TB.id1 = DL.id1 
)  

или

DELETE FROM MY_SCHEMA.table1 DL 
WHERE NOT EXISTS (
    SELECT 1 FROM table2 ERR_TB 
     WHERE  ERR_TB.id2 = DL.id2
) 
0 голосов
/ 07 декабря 2018

Это работает для меня, надеюсь, это поможет вам:

delete t1 from table1 t1
join table2 t2
on t1.id1 = t2.id1
where t1.id1 = t2.id1 and t1.id2 = t2.id2
0 голосов
/ 06 декабря 2018

Вы можете попробовать not exists:

delete my_schema.table1 t1 
 where not exists ( select 1 from table2 t2 where t2.id = t1.id2 );

или minus:

delete my_schema.table1
 where id2 in ( select t1.id2 from table1 t1 minus
                select t2.id  from table2 t2  );

dbfiddle uk demo

...