SQL 'DELETE CASCADE'

标签 sql postgresql sql-delete cascading-deletes

我有一个表 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/

相关文章:

php - 从 mysql 数据为用户分配并显示排名

sql - 什么是数据库规范化和功能依赖?

sql - 找到双方都参与的聊天

SQL 查询以通过连接对 Group By 进行区分计数

postgresql - postgres 工作日频率按小时

PHP 删除查询不起作用,甚至没有收到任何错误消息

mysql - SQL 使用列值作为查询字符串中的关键字

json - 使用 Spring Data JPA 将 JSON 作为字段存储在 PostgreSQL 中

mysql - 如何在--safe-updates模式下删除最新的一些记录

PHP删除功能?