PostgreSQL 从多个表中删除外连接的行

PostgreSQL delete rows that outer join from multiple tables

我正在尝试从 table 中删除其他 2 个故事中不存在 ID 的行。在 PostgreSQL 上:

table答:

idB idC age
1 4 Three
2 5 Three
3 6 Three

table乙:

idB name age
3 Two Three
7 Two Three

table C:

idC name age
4 Two Three
5 Two Three
6 Two Three

最终 table A :

idB idC age
3 6 Three

应删除 table A 的第一行,因为 idC = 4 在 table C 中不存在 table A 的第二行应该删除,因为 idB = 2 在 table B 中不存在 第三行 table A 应该保留 idB = 3 存在于 table B 和 idC = 6 存在于 table C

我该怎么做?

这里是你如何做到的:

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

只需使用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);