2011-10-27 28 views
0

我有兩個表T1和T2。 C1是T1的主鍵,C2是引用T1的列C1的T2的外鍵。我想刪除驗證特定條件的T2行。可以使用一個簡單的DELETE:刪除多表而不加入

DELETE FROM T2 WHERE <condition>; 

但是,我也想刪除與上一條語句刪除的行相關的T1行。例如,如果前面的語句刪除了T2(行的T2)行,我還想刪除R2引用的行R1(T1)。 我知道有可能在JOIN中使用DELETE語句,但是我使用不支持此功能的HSQLDB內存數據庫。

回答

4

如果你使用ON DELETE CASCADE,那麼你可以使用alwa ys執行刪除這種方式:

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

通常情況下,這種情況應該是倒過來,就刪除從T1一排,從T2的所有行與國外應參考已被刪除:ON DELETE CASCADE(設置這對外國的關係)

對於從多個表中刪除, 這應該工作(MySQL Delete Syntax): 刪除[LOW_PRIORITY] [QUICK] [忽略] FROM tbl_name [*] [,tbl_name [*]] ... 使用table_references [WHERE where_condition]

+0

像你說的情況應該是反過來,我使用ON DELETE CASCADE。當T1的實例將被刪除時,我想刪除的所有行(其他表)將被刪除。問題是我正在使用HSQLDB,我不知道是否支持多表DELETE。 –