使用MySQL,我试图一次从多个表中删除多条记录。 最初我认为可以这样做:
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 (?,?,?,?);
然而,如果table2中没有现有的记录,我应该将JOIN改为LEFT JOIN吗?此外,如果我只删除八个表中的两三条记录(2x2x2x2x2x2x2x2),这样做会导致延迟吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
是的,将
table2上的连接改为left join会实现您想要的效果。属于列表和table3的table1中的行都将被删除,无论它们是否也存在于table2中。同时,可能的匹配行也将被删除。我建议将
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)