我有兩個表TableA
和TableB
,並且每個表都有一個名爲ID
的字段。在MySQL中刪除兩個表中的ID匹配的記錄
我想刪除TableA
中的所有記錄,其中ID
與TableB
中的記錄匹配。
我嘗試這樣做的命令,但TableB
找不到
DELETE FROM TableA WHERE TableA.id=TableB.id;
我有兩個表TableA
和TableB
,並且每個表都有一個名爲ID
的字段。在MySQL中刪除兩個表中的ID匹配的記錄
我想刪除TableA
中的所有記錄,其中ID
與TableB
中的記錄匹配。
我嘗試這樣做的命令,但TableB
找不到
DELETE FROM TableA WHERE TableA.id=TableB.id;
不能引用表B上WHERE
,因爲該表沒有被連接。但在這種情況下,你甚至不需要一個JOIN
,使用此:
DELETE FROM TableA WHERE id IN (SELECT id FROM TableB)
我會用加入
DELETE TABLEA FROM TABLEA INNER JOIN TABLEB USING(ID)
大的子查詢可能會很慢,如果MySQL的結束有實際兌現臨時表 - 絕對值得檢查查詢計劃
您可能需要考慮使用foreign key constraints,因此您不必手動執行這些類型的操作,而是數據庫將爲您處理它們。
例如,如果你在tableA和tableB之間有一個共享的id,並且發生了從tableA的刪除,MySQL會自動處理你從tableB的delete,並且你不必擔心加入到其他表對tableA有一個FK約束。
這可能是簡單的:
DELETE FROM tableA WHERE id = some_id LIMIT 1;
如何使用INNER JOIN?這對我在MySQL中工作:
DELETE tablea FROM tablea
INNER JOIN tableb
ON tablea.ID = tableb.ID
是否超出每個記錄的子查詢或每個查詢一次? EX:如果我在表'TableA'中有100行'SELECT ID FROM TableB'運行100次或1次? – Kristian 2012-07-02 12:00:43
子查詢執行一次,然後將結果與'TableA'中的'id'進行比較。 – bfavaretto 2012-07-02 13:57:51