【发布时间】:2019-02-16 07:42:04
【问题描述】:
我有一个 TableA 可以有很多与之相关的 TableB,而 TableB 可以有很多与之相关的 TableC 行,而 TableC 有很多 TableD 行。所以表A->表B->表C->表D。我要做的是给定 TableA 行 id,选择所有通过其他表相关的 TableD 行并将它们全部删除。
TableA | TableB | TableC | TableD
--------------------------------------
tableAId | tableAId | tableBId | tableCId
| tableBId | tableCId | tableDId
以及我尝试过的查询:
DELETE FROM TableD
WHERE TableA.tableAId = 2
AND TableA.tableAId= TableB.tableAId
AND TableB.tableBId= TableC.tableBId
AND TableC.tableCId = TableD.tableCId
样本表
TableA TableB TableC TableD
tableAID | tableAID tableBId | tableBId tableCId | tableCId tableDId
---------|--------------------|---------------------|---------------------
1 | 1 15 | 15 5 | 6 4
2 | 2 16 | 16 6 | 5 3
5 14
5 11
想要的结果,给定 tableAId = 1
TableA TableB TableC TableD
tableAID | tableAID tableBId | tableBId tableCId | tableCId tableDId
---------|--------------------|---------------------|---------------------
1 | 1 15 | 15 5 | 6 4
2 | 2 16 | 16 6 |
【问题讨论】:
-
样本数据和期望的结果真的很有帮助。
-
添加了样本和期望的结果,希望有意义
-
您的查询即将完成。只需将使用表的列表添加到其中:
DELETE FROM TableD USING TableA, TableB, TableC WHERE ...更多关于文档中的USING子句:postgresql.org/docs/current/static/sql-delete.html
标签: sql postgresql