MySQL 如何删除event_id重复的所有行且不保留任意重复行
实现方案
方法1:直接删除不符合要求的行
先执行查询确认筛选结果符合预期:
SELECT * FROM 你的表名 WHERE Event_id IN ( SELECT Event_id FROM 你的表名 GROUP BY Event_id HAVING COUNT(*) = 1 );
确认无误后执行删除操作:
DELETE FROM 你的表名 WHERE Event_id NOT IN ( -- 套一层临时表规避MySQL同表查询删除的限制 SELECT Event_id FROM ( SELECT Event_id FROM 你的表名 GROUP BY Event_id HAVING COUNT(*) = 1 ) AS temp );
方法2:新建表保留符合要求的数据(适合数据量较大的场景,效率更高)
- 创建和原表结构一致的新表
CREATE TABLE 新表名 LIKE 原表名;
- 插入筛选后的合规数据
INSERT INTO 新表名 SELECT * FROM 原表名 GROUP BY Event_id HAVING COUNT(*) = 1;
- 确认新表数据符合预期后,替换原表
DROP TABLE 原表名; RENAME TABLE 新表名 TO 原表名;
注意:所有删除/表替换操作前请务必提前备份数据,先执行SELECT查询确认筛选结果符合预期再执行变更操作。
内容的提问来源于stack exchange,提问作者Judith
相关产品推荐
相关产品推荐

