我有两张桌子T1和T2。 C1是T1的主键,C2是T2的外键,引用T1的列C1。我想删除验证特定条件的T2行。可以使用简单的DELETE:
DELETE FROM T2 WHERE <condition>;
但是,我还想删除与前一个语句删除的行相关的T1行。例如,如果前一个语句删除了行R2(T2),我还想删除R2引用的行R1(T1)。 我知道可以在JOIN中使用DELETE语句,但我使用的HSQLDB内存数据库不支持此功能。
答案 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]