在一個語句中從多個表中刪除
P粉716228245
2023-08-18 10:28:49
<p>使用MySQL,我試著一次從多個表中刪除多筆記錄。
最初我認為可以這樣做:</p>
<pre class="brush:php;toolbar:false;">DELETE t1, t2
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.table1_id
JOIN table3 t3 ON t1.id = t3.table1_id
WHERE t1.id IN (?,?,?,?);</pre>
<p>然而,如果table2中沒有現有的記錄,我應該將<strong>JOIN</strong>改為<strong>LEFT JOIN</strong>嗎?此外,如果我只刪除八個表中的兩三筆記錄(2x2x2x2x2x2x2x2),這樣做會導致延遲嗎? </p>
是的,將
table2
上的連線改為left join
會實現您想要的效果。屬於清單和table3
的table1
中的行都會被刪除,無論它們是否也存在於table2
中。同時,可能的匹配行也將被刪除。我建議將
table3
上的join
重寫為exists
條件。這樣可以更明確地表達查詢的意圖,並且可能性能更好,特別是如果在table3(table1_id)
上有索引的話: