2011-12-21 28 views
1

私は2つのテーブルTableATableBを持っていて、それぞれフィールドがIDとなっています。2つのテーブルのIDが一致するMySQLのレコードを削除する

TableAのすべてのレコードを削除します。IDは、TableBのレコードと一致します。

私は、このコマンドを実行しようが、TableBは、そのテーブルが参加していなかったので、あなたがWHEREにTableBのを参照することはできません

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

答えて

5

が見つかりません。私は、MySQLが実際に一時的に実体化する必要が終わるならば参加

DELETE TABLEA FROM TABLEA INNER JOIN TABLEB USING(ID) 

ビッグサブクエリが遅くなることがあります使用することになり

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

それは各レコードまたはクエリごとに1回onyのサブクエリをexcecuteですか? EX:テーブル 'TableA'に100行がある場合、 'SELECT id FROM TableB'は100回または1回実行されますか? – Kristian

+1

サブクエリは1回実行され、結果は 'TableA'の' id'sと比較されます。 – bfavaretto

1

:しかし、このような場合にあなたも、これを使用し、JOINを必要としませんテーブル - クエリプランを確認する価値があります

2

foreign key constraintsを使用することをお勧めします。手動でこれらの操作を行う必要はありません。データベースで処理されます。

たとえば、tableAとtableBの間に共有IDがあり、tableAからの削除が発生した場合、MySQLはtableBからの削除を自動的に処理し、他のテーブルへの参加について心配する必要はありません。 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 
関連する問題