2011-12-21 113 views
1

我有兩個表TableATableB,並且每個表都有一個名爲ID的字段。在MySQL中刪除兩個表中的ID匹配的記錄

我想刪除TableA中的所有記錄,其中IDTableB中的記錄匹配。

我嘗試這樣做的命令,但TableB找不到

DELETE FROM TableA WHERE TableA.id=TableB.id; 

回答

5

不能引用表B上WHERE,因爲該表沒有被連接。但在這種情況下,你甚至不需要一個JOIN,使用此:

DELETE FROM TableA WHERE id IN (SELECT id FROM TableB) 
+0

是否超出每個記錄的子查詢或每個查詢一次? EX:如果我在表'TableA'中有100行'SELECT ID FROM TableB'運行100次或1次? – Kristian 2012-07-02 12:00:43

+1

子查詢執行一次,然後將結果與'TableA'中的'id'進行比較。 – bfavaretto 2012-07-02 13:57:51

1

我會用加入

DELETE TABLEA FROM TABLEA INNER JOIN TABLEB USING(ID) 

大的子查詢可能會很慢,如果MySQL的結束有實際兌現臨時表 - 絕對值得檢查查詢計劃

2

您可能需要考慮使用foreign key constraints,因此您不必手動執行這些類型的操作,而是數據庫將爲您處理它們。

例如,如果你在tableA和tableB之間有一個共享的id,並且發生了從tableA的刪除,MySQL會自動處理你從tableB的delete,並且你不必擔心加入到其他表對tableA有一個FK約束。

這可能是簡單的:

DELETE FROM tableA WHERE id = some_id LIMIT 1; 
1

如何使用INNER JOIN?這對我在MySQL中工作:

DELETE tablea FROM tablea 
INNER JOIN tableb 
ON tablea.ID = tableb.ID 
相關問題