如何解决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 举报,一经查实,本站将立刻删除。