mysql – 删除除一个之外的所有重复项
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 删除除一个之外的所有重复项,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1488字,纯文字阅读大概需要3分钟。
内容图文
![mysql – 删除除一个之外的所有重复项](/upload/InfoBanner/zyjiaocheng/901/4c3662af737c4be19a7e5b9fc6e44514.jpg)
我们有一个带有user_id和business_id的表business_users,我们有重复项.
如何编写一个删除所有重复项的查询?
解决方法:
完全相同的行
如果你想避免完全相同的行,我首先理解你的问题,那么你可以选择唯一的行到一个单独的表并从中重新创建表数据.
CREATE TEMPORARY TABLE tmp SELECT DISTINCT * FROM business_users;
DELETE FROM business_users;
INSERT INTO business_users SELECT * FROM tmp;
DROP TABLE tmp;
但是,如果存在引用此表的任何外键约束,请小心,因为临时删除行可能会导致其他位置的级联删除.
引入一个独特的约束
如果您只关心user_id和business_id对,则可能希望将来避免引入重复项.您可以将现有数据移动到临时表,添加约束,然后将表数据移回,忽略重复项.
CREATE TEMPORARY TABLE tmp SELECT * FROM business_users;
DELETE FROM business_users;
ALTER TABLE business_users ADD UNIQUE (user_id, business_id);
INSERT IGNORE INTO business_users SELECT * FROM tmp;
DROP TABLE tmp;
上面的答案基于this answer.关于外键的警告适用于上面的部分.
一次性移除
如果您只想执行单个查询,而不以任何方式修改表结构,并且您有一个标识每行的主键ID,那么您可以尝试以下操作:
DELETE FROM business_users WHERE id NOT IN
(SELECT MIN(id) FROM business_users GROUP BY user_id, business_id);
this answer之前提出过类似的想法.
如果上述请求失败,因为您不允许在同一步骤中从表中读取和删除,则可以再次使用临时表:
CREATE TEMPORARY TABLE tmp
SELECT MIN(id) id FROM business_users GROUP BY user_id, business_id;
DELETE FROM business_users WHERE id NOT IN (SELECT id FROM tmp);
DROP TABLE tmp;
如果您愿意,在以这种方式清理数据后仍然可以引入唯一性约束.为此,请执行上一节中的ALTER TABLE行.
内容总结
以上是互联网集市为您收集整理的mysql – 删除除一个之外的所有重复项全部内容,希望文章能够帮你解决mysql – 删除除一个之外的所有重复项所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。