MySQL-删除重复数据并保留一条

2018-08-01  本文已影响0人  蜡笔不好吃

问题

这个问题是在思考数据仓库数据更新问题时想到的,导入数据重复的话,要怎样保留一条数据。这个在Power Query中非常简单。


删除重复项

但是在MySQL就没有这么简单了.....

思路

遇到问题当然是先Google或者百度一下

百度给的资料是

# sql删除重复
sql = ''' DELETE FROM table_qj
WHERE qj_id IN (SELECT qj_id FROM table_qj GROUP BY qj_id HAVING count(qj_id)>1)
AND
qj_id NOT IN (SELECT max(qj_time) FROM table_qj GROUP BY qj_id HAVING count(qj_id)>1)
'''

但是在python中报错


Python报错

查了资料原来是MySQL中不能先select一个表,在按此条件进行更新和删除同一个表的记录。

解决办法就是将select得到的结果,再通过中间表select一遍,这样就规避了错误,这个问题只出现于mysql,mssql和oracle不会出现此问题。

不过!
因为我这里的记录是完全相同的,所以不起作用。

后来换了个方法

select distinct * into Tmp from tableName
drop table tableName
select * into tableName from Tmp
drop table Tmp

原来表名tableName,去重查询,然后把结果放到新建表Tmp中,删除原来的表,再把Tmp的数据放到新建表tableName,删除Tmp表。

还是报错

原来但是MySQL不支持 select into

参考资料:https://www.cnblogs.com/jacson/p/4686273.html
改写

Create table tmp (Select distinct * from table_qj)
drop table table_qj
Create table table_qj (Select * from tmp)
drop table tmp

最后想到
我他喵的建两次新表干嘛,重命名就好了

最终版

Create table tmp (Select distinct * from table_qj)
drop table table_qj
RENAME TABLE tmp TO table_qj

总结

这是第一次知道,MySQL能把查询结果存到新建的表中。涨知识了...
然后也开始接触到不同数据库有些语法是执行不了的,像执行查询后删除和select into 这是之前没有碰到的。

另外还需要好好学习,MySQL的增量增加。数据仓库的增量增加。如何实现。

上一篇 下一篇

猜你喜欢

热点阅读