P粉1186987402023-08-19 00:06:31
是的,將table2
上的連線改為left join
會實現您想要的效果。屬於清單和table3
的table1
中的行都會被刪除,無論它們是否也存在於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)