Aus mehreren Tabellen in einer Anweisung löschen
P粉716228245
2023-08-18 10:28:49
<p>Mit MySQL versuche ich, mehrere Datensätze aus mehreren Tabellen gleichzeitig zu löschen.
Zuerst dachte ich, ich könnte das machen: </p>
<pre class="brush:php;toolbar:false;">LÖSCHEN t1, t2
VON Tabelle1 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>Wenn in Tabelle2 jedoch keine Datensätze vorhanden sind, sollte ich dann <strong>JOIN</strong> in <strong>LEFT JOIN</strong> ändern? Wenn ich nur zwei oder drei Datensätze aus den acht Tabellen (2x2x2x2x2x2x2x2) lösche, führt dies dann zu einer Verzögerung? </p>
是的,将
table2
上的连接改为left join
会实现您想要的效果。属于列表和table3
的table1
中的行都将被删除,无论它们是否也存在于table2
中。同时,可能的匹配行也将被删除。我建议将
table3
上的join
重写为exists
条件。这样可以更明确地表达查询的意图,并且可能性能更好,特别是如果在table3(table1_id)
上有索引的话: