删除没有连接的多表

时间:2011-10-27 09:48:37

标签: sql join hsqldb sql-delete

我有两张桌子T1和T2。 C1是T1的主键,C2是T2的外键,引用T1的列C1。我想删除验证特定条件的T2行。可以使用简单的DELETE:

DELETE FROM T2 WHERE <condition>;

但是,我还想删除与前一个语句删除的行相关的T1行。例如,如果前一个语句删除了行R2(T2),我还想删除R2引用的行R1(T1)。 我知道可以在JOIN中使用DELETE语句,但我使用的HSQLDB内存数据库不支持此功能。

2 个答案:

答案 0 :(得分:4)

如果使用ON DELETE CASCADE,则可以始终以这种方式执行删除:

DELETE FROM T1 WHERE T1.C1 IN (SELECT T2.C2 FROM T2 WHERE <condition>)

答案 1 :(得分:1)

通常,情况应该反过来,在从T1删除行时,应该删除带有外部引用的T2的所有行:ON DELETE CASCADE(在外来关系上设置此项)

要从多个表中删除, 这应该有效(MySQL Delete Syntax): 删除[LOW_PRIORITY] [QUICK] [IGNORE]     FROM tbl_name [。*] [,tbl_name [。*]] ...     使用table_references     [WHERE where_condition]