mysql表数据去重,一对多改为一对一去重
数据
一对一
mysql
一对
改为
删除
重复
例如
原表
select
编程进阶笔记
发布日期
2022-09-14
更新日期
2022-09-14
阅读次数 86
文章字数 675
原本的表是一对多,后面改为一对一
所以,要删除一些重复数据,仅保留对应关系的一条。
首先,复制表结构,然后group by 字段1,字段2... ,这里的 group by 就是要保留的一对一关系,例如 cid 对应一个 rid
CREATE TABLE 新表 LIKE 原表;
insert into 新表 select * from 原表 group by cid,rid;
然后把两个表名对换即可。
如果数据很多,可能有些耗时,得到新表后先不着急删除原表,先检测数据是否为想要的数据,确认原表已无用再删除。
后记:
另一种办法,就是 delete 语句,伪代码: delete .... where 存在重复的数据 and not in ( 第一条数据id )
例如:(删除重复的部门名称)
DELETE
FROM
dept
WHERE
dname IN ( SELECT * FROM ( SELECT dname FROM dept GROUP BY dname HAVING count( dname ) > 1 ) a )
AND deptno NOT IN ( SELECT * FROM ( SELECT min( deptno ) AS deptno FROM dept GROUP BY dname HAVING count( dname ) > 1 ) b )
第一种思路更简单操作更安全,第二种也行。
附:mysql 的 in 可以多字段,例如:
select * from user where (user_id,type) in ((568,6),(569,6),(600,8));
select * from user where (legal_id,type) not in (select a.legal_id,a.type from user as a , role_user_relation as b where a.legal_id=b.legal_id and a.type=b.legal_type) limit 0,10;
文章作者: 朱丰华
文章链接: https://smart.52dixiaowo.com/blog/post-75.html
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。
数据
一对一
mysql
一对
改为
删除
重复
例如
原表
select
发表评论
相关推荐