1 つのステートメントで複数のテーブルから削除
P粉716228245
2023-08-18 10:28:49
<p>MySQL を使用して、複数のテーブルから複数のレコードを一度に削除しようとしています。
最初はこれができると思いました: </p>
<pre class="brush:php;toolbar:false;">t1、t2 を削除
FROM テーブル 1 t1
JOIN table2 t2 ON t1.id = t2.table1_id
JOIN table3 t3 ON t1.id = t3.table1_id
WHERE t1.id IN (?,?,?,?);
<p>ただし、table2 に既存のレコードがない場合、<strong>JOIN</strong> を <strong>LEFT JOIN</strong> に変更する必要がありますか?また、8 つのテーブル (2x2x2x2x2x2x2x2) から 2 つまたは 3 つのレコードだけを削除すると、遅延が発生しますか? </p>
はい、
リーリーtable2
の結合をleft join
に変更すると、希望の効果が得られます。リストに属するtable1
およびtable3
内の行は、table2
にも存在するかどうかに関係なく、削除されます。同時に、一致する可能性のある行も削除されます。
にインデックスがある場合、クエリの意図がより明確になり、パフォーマンスが向上する可能性があります。 リーリーtable3
のjoin
をexists
条件に書き換えることをお勧めします。これにより、特にtable3(table1_id)
: