微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决PostgreSQL 从多个表中删除外连接的行

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

表A:

idB idC 年龄
1 4 三个
2 5 三个
3 6 三个

表B:

idB 名称 年龄
3 两个 三个
7 两个 三个

表 C:

idC 名称 年龄
4 两个 三个
5 两个 三个
6 两个 三个

决赛桌A:

idB idC 年龄
3 6 三个

表A的第一行应该删除,因为表C中不存在idC = 4 表A的第二行应该删除,因为表B中不存在idB = 2 表A的第三行应该保持idB = 3存在于表B中,idC = 6存在于表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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。