我有一个表 B,它有一个到表 A 的外键,现在我想在 A 上执行某种“DELETE CASCADE”操作,但 PostgreSQL 不接受以下操作:
DELETE FROM ATable WHERE aid IN
(
DELETE FROM BTable WHERE aid IN
(
... [expression that depends on the entries in BTAble] ...
)
RETURNING aid
);
似乎只有 SELECT 可以位于 IN ()
子句内。我想有一些简单的(标准 SQL,不是 PostgreSQL 特定的?)方法可以做到这一点?
编辑:当您遇到此类问题时,可以肯定地说某些东西的结构很糟糕吗?在我们的例子中,我有一种直觉, ..[expr]..
中的命中应该位于新的 CTAble 中,而不是作为 ATable 中的子集,但我无法真正指出任何设计支持这一点的范例。
最佳答案
这在 PostgreSQL 9.1 中是可能的,但我认为在不定义级联约束的情况下没有任何方法可以做到这一点。
http://developer.postgresql.org/pgdocs/postgres/queries-with.html#QUERIES-WITH-MODIFYING
关于SQL 'DELETE CASCADE',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5676608/