MySQL Error Code 1093求助:删除语句无法指定目标表
解决MySQL Error Code: 1093 删除重复记录问题
错误原因
MySQL不允许在DELETE/UPDATE语句的FROM子句中直接引用要修改的目标表,这是出于避免数据不一致的设计限制,所以你原来的语句会触发You can't specify target table 'cars' for update in FROM clause错误。
解决方案1:用派生表包装子查询
把原来的子查询包装成一个派生表(临时结果集),让MySQL将其视为独立表,就能绕过限制。修改后的删除语句如下:
DELETE FROM cars WHERE model_id NOT IN ( SELECT min_id FROM ( SELECT MIN(model_id) AS min_id FROM cars GROUP BY model_name, brand ) AS temp );
解决方案2:用JOIN方式删除(更高效)
对于大数据量的表,JOIN方式的删除性能更优,逻辑是关联表自身,保留每个分组的最小model_id,删除其余记录:
DELETE c1 FROM cars c1 JOIN cars c2 ON c1.model_name = c2.model_name AND c1.brand = c2.brand AND c1.model_id > c2.model_id;
验证效果
执行完删除语句后,查询表数据:
SELECT * FROM cars;
会得到去重后的结果:
| model_id | model_name | color | brand |
|---|---|---|---|
| 1 | Leaf | Black | Nissan |
| 3 | Model S | Black | Tesla |
| 4 | Model X | White | Tesla |
| 5 | Ioniq 5 | Black | Hyundai |
| 7 | Ioniq 6 | White | Hyundai |
内容的提问来源于stack exchange,提问作者Dileep Jetty
相关产品推荐
相关产品推荐

