2

2 つの MySQL テーブルを同期するための小さなスクリプトを作成しています (t1 を t2 に「ミラーリング」します)。

ステップで、同じIDでt1で削除されたt2内の行を削除したいと思います。

私はこのクエリを試しました:

delete from t2 where t2.id in 
    ( select t2.id left join t1 on (t1.id=t2.id) where t1.id is null )

しかし、Mysql は、削除と選択で同時に t2 を使用することを禁止しています (ちなみに論理的に聞こえます)。

もちろん、クエリを 2 つのクエリに分割できます。最初に ID を選択し、次にこれらの ID を持つ行を削除します。

私の質問: t1 にもう存在しない行を t2 から削除するよりクリーンな方法はありますか? 1つのクエリのみで?

4

3 に答える 3

0
delete t2.* 
from t2 
left join t1 on (t1.id=t2.id) 
where t1.id is null;
于 2010-05-10T20:09:09.533 に答える
0

このクエリは 2 つのテーブルを結合し、新しいテーブルにパートナーを持たないテーブルのみを選択するため、それらを一度に削除できます。

DELETE t2 FROM t2
LEFT JOIN t1
ON t2.id = t1.id
WHERE t1.id IS NULL;
于 2010-05-10T20:10:12.113 に答える
0

t2 に対して t1 の左結合を使用する場合、t1 フィールドの値は、t2 に一致しない行に対して NULL になるため、これは機能するはずです。

DELETE FROM t2
LEFT JOIN t1 ON t1.id = t2.id
WHERE t1.id IS NULL;
于 2010-05-10T20:16:13.430 に答える