在一个表中,我有三列-id,name和count。很多名称列是相同的(由于早期缺少UNIQUE),我想解决此问题。但是,id列由其他(4或5,我认为-我必须检查文档)表使用来查找名称,只是删除它们会破坏事情。因此,有没有一种很好的,干净的说法:“查找所有相同的记录并将它们合并在一起”?
问题来源于stack overflow
这种问题时有发生。不,没有真正清洁的方法。您必须更改子表中依赖于父表中不需要值的所有行,然后才能消除父表中不需要的行。
MySQL支持多表UPDATE和DELETE语句(与其他品牌的数据库不同),因此您可以执行一些漂亮的技巧,如下所示:
UPDATE names n1 JOIN names n2 ON (n1.id < n2.id AND n1.name = n2.name) JOIN child_table c ON (n2.id = c.id) SET c.name_id = n1.id ORDER BY n1.id DESC; 在所有子表上完成此操作后,就可以使用MySQL的多表DELETE语法删除父表中不需要的行:
DELETE FROM n2 USING names n1 JOIN names n2 ON (n1.id < n2.id AND n1.name = n2.name);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。