Sql 删除多表而不连接
我有两张桌子T1和T2。C1是T1的主键,C2是T2的外键,它引用T1的C1列。我想删除验证特定条件的T2行。可以使用简单的删除:Sql 删除多表而不连接,sql,join,hsqldb,sql-delete,Sql,Join,Hsqldb,Sql Delete,我有两张桌子T1和T2。C1是T1的主键,C2是T2的外键,它引用T1的C1列。我想删除验证特定条件的T2行。可以使用简单的删除: DELETE FROM T2 WHERE <condition>; 但是,我还想删除T1中与前面语句删除的行相关的行。例如,如果T2的行R2已被上一条语句删除,那么我还想删除带有R2引用的主键的T1的行R1。 我知道有可能在JOIN中使用DELETE语句,但我使用的是不支持此功能的HSQLDB内存数据库。通常情况下,情况应该是相反的,从T1中删除一行,
DELETE FROM T2 WHERE <condition>;
但是,我还想删除T1中与前面语句删除的行相关的行。例如,如果T2的行R2已被上一条语句删除,那么我还想删除带有R2引用的主键的T1的行R1。
我知道有可能在JOIN中使用DELETE语句,但我使用的是不支持此功能的HSQLDB内存数据库。通常情况下,情况应该是相反的,从T1中删除一行,T2中具有外部引用的所有行都应该被删除:在删除级联时,将此设置为“在外部关系上” 用于从多个表中删除, 这应该起作用: 删除[低优先级][快速][忽略] 来自tbl_名称[.*][,tbl_名称[.*]]。。。 使用表u引用
[其中,条件]通常,情况应该是相反的,从T1删除一行时,从T2删除所有具有外部引用的行:在删除级联时,将此设置为“外部关系” 用于从多个表中删除, 这应该起作用: 删除[低优先级][快速][忽略] 来自tbl_名称[.*][,tbl_名称[.*]]。。。 使用表u引用
[其中WHERE_条件]如果在删除级联上使用,则始终可以通过以下方式执行删除:
DELETE FROM T1 WHERE T1.C1 IN (SELECT T2.C2 FROM T2 WHERE <condition>)
如果使用ON DELETE CASCADE,则始终可以通过以下方式执行删除:
DELETE FROM T1 WHERE T1.C1 IN (SELECT T2.C2 FROM T2 WHERE <condition>)
就像你说的情况应该是相反的,我使用DELETE CASCADE。删除T1实例时,我要删除的其他表的所有行都将被删除。问题是我使用的是HSQLDB,我不知道是否支持多表删除。就像你说的情况应该是相反的,我使用的是DELETE CASCADE。删除T1实例时,我要删除的其他表的所有行都将被删除。问题是我使用的是HSQLDB,我不知道是否支持多表删除。