Я пытаюсь удалить строки из таблицы, где их идентификаторы не существуют в других двух сказках. в PostgreSQL: таблица A: idB idC возраст 1 4 Три 2 5 Три 3 6 Три таблица B: idB имя возраст 3 Два Три 7 ...

1
4212 10 Апр 2021 в 04:26

2 ответа

Лучший ответ

Просто используйте not exists:

delete from tableA a
    where not exists (select 1 from tableB b where b.idB = a.idB) or
          not exists (select 1 from tableC c where c.idC = a.idC);
1
Gordon Linoff 10 Апр 2021 в 01:52

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

with tt as (
  select a.* from tableA a
  left join tableB b on a.idb =b.idb
  left join tableC c on a.idC = c.idc
  where b.idb is null or c.idc is null
)
delete from tableA a
using tt 
where a.idB = tt.idB
and a.idC = tt.idC
1
eshirvana 10 Апр 2021 в 01:37