Dai Chong's blog

sql删除数据库重复的数据

今天在工作中遇到了一个注册绑定微信UID的问题。按正常逻辑来说,一个手机号只能绑定一个UId,但问题总是会只有你想不到没有你做不到,有个客户居然用一个手机号绑定了几百个手机号,具体是为了干什么就不说了。有一个人能想到这样的方法,就会有第二个人能想到,之后就不用说了越来越多。仅仅几天数据库里的数据已经几万条了,慢慢的我意识到了这样下去肯定是不行的,必须想办法解决。刚开始是手动删除重复的数据,但是太多了,手动删简直是没法弄,不删还不行,给字段加唯一索引必须要把重复的数据删掉.

[sql]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

delete from [table_name] where [primary key] in (select [primary key] from (select [primary key]
FROM
[table_name]
WHERE
[重复的字段名] IN (
SELECT
[primary key]
FROM
[table_name]
GROUP BY
[重复的字段名]
HAVING
count([重复的字段名]) > 1
)
AND [primary key] NOT IN (
SELECT
min([primary key])
FROM
[table_name]
GROUP BY
[重复的字段名]
HAVING
count([重复的字段名]) > 1
))a)


这段sql不仅解决了我的燃眉之急,并且还帮我保留了重复数据中的一条最老的数据!

虽然sql写的很完美但是也要经过实践才能是不是正确的!

1
SELECT * FROM [table_name] group by [重复的字段名] HAVING count(*)>1

查询条数为0,sql正确无误,漂亮!


 评论