删除多表而不加入
Posted
技术标签:
【中文标题】删除多表而不加入【英文标题】:Delete multi table without join 【发布时间】:2011-10-27 09:48:36 【问题描述】:我有两张桌子 T1 和 T2。 C1 是 T1 的主键,C2 是 T2 的外键,它引用了 T1 的 C1 列。我想删除验证特定条件的 T2 行。可以使用简单的 DELETE :
DELETE FROM T2 WHERE <condition>;
但是,我还想删除与上一条语句删除的行相关的 T1 行。例如,如果(T2 的)行 R2 已被前面的语句删除,我还想删除具有 R2 引用的主键的行 R1(T1)。 我知道可以将 DELETE 语句与 JOIN 一起使用,但我使用的 HSQLDB 内存数据库不支持此功能。
【问题讨论】:
【参考方案1】:如果你使用 ON DELETE CASCADE,那么你总是可以这样执行删除:
DELETE FROM T1 WHERE T1.C1 IN (SELECT T2.C2 FROM T2 WHERE <condition>)
【讨论】:
【参考方案2】:通常,情况应该是相反的,从 T1 中删除一行时,T2 中具有外部引用的所有行都应该被删除:ON DELETE CASCADE
(在外部关系上设置)
对于从多个表中删除, 这应该有效(mysql Delete Syntax): 删除 [LOW_PRIORITY] [快速] [忽略] FROM tbl_name[.*] [, tbl_name[.*]] ... 使用 table_references [WHERE where_condition]
【讨论】:
就像你说的情况应该相反,我使用 ON DELETE CASCADE。当 T1 的实例将被删除时,我要删除的所有(其他表的)行都将被删除。问题是我用的是HSQLDB,不知道是否支持多表DELETE。以上是关于删除多表而不加入的主要内容,如果未能解决你的问题,请参考以下文章
在一个命令中删除所有表而不删除 django dbshell 中的 postgres 中的数据库?