在一個語句中從多個表中刪除
P粉716228245
P粉716228245 2023-08-18 10:28:49
0
1
547
<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>
P粉716228245
P粉716228245

全部回覆(1)
P粉118698740

是的,將table2上的連線改為left join會實現您想要的效果。屬於清單和table3table1中的行都會被刪除,無論它們是否也存在於table2中。同時,可能的匹配行也將被刪除。

delete t1, t2
from table1 t1
left join table2 t2 on t1.id = t2.table1_id
inner join table3 t3 on t1.id = t3.table1_id
where t1.id in (?, ?, ?, ?);

我建議將table3上的join重寫為exists條件。這樣可以更明確地表達查詢的意圖,並且可能性能更好,特別是如果在table3(table1_id)上有索引的話:

delete t1, t2
from table1 t1
left join table2 t2 on t1.id = t2.table1_id
where 
    t1.id in (?, ?, ?, ?)
    and exists (select 1 from table3 t3 where t3.table1_id = t1.id)
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板