首页  >  文章  >  后端开发  >  SQL如何查找数据库多栏位重复数据?

SQL如何查找数据库多栏位重复数据?

WBOY
WBOY原创
2016-06-06 20:39:081092浏览

首先,我有一个电影数据库,这是其中的一部分:
[rel] movie_id, star_id, time

一般是一个电影,对应多个演出明星。本来相同的movie_id 和 star_id 在数据库中只能出现一次。
可是之前系统设计漏洞,导致重复插入了多项数据
譬如:
功夫, 周星驰
功夫, 黄圣依
功夫, 周星驰
等于是我们数据库中出现了两个 功夫, 周星驰。

请问各位朋友,有没有可以设计一个sql语句,帮我快速的查找出这些冗余的项和 电影的id。

回复内容:

首先,我有一个电影数据库,这是其中的一部分:
[rel] movie_id, star_id, time

一般是一个电影,对应多个演出明星。本来相同的movie_id 和 star_id 在数据库中只能出现一次。
可是之前系统设计漏洞,导致重复插入了多项数据
譬如:
功夫, 周星驰
功夫, 黄圣依
功夫, 周星驰
等于是我们数据库中出现了两个 功夫, 周星驰。

请问各位朋友,有没有可以设计一个sql语句,帮我快速的查找出这些冗余的项和 电影的id。

SQL如何查找数据库多栏位重复数据?

保留id最小的记录

查询重复数据
select * from TABLE_NAME where (movie_id,star_id) in (select movie_id,star_id from TABLE_NAME group by movie_id,star_id having count() > 1) and id not in (select min(id) from TABLE_NAME group by movie_id,star_id having count()>1)

删除重复数据
delete from TABLE_NAME where (movie_id,star_id) in (select movie_id,star_id from TABLE_NAME group by movie_id,star_id having count() > 1) and id not in (select min(id) from TABLE_NAME group by movie_id,star_id having count()>1)

<code>sql</code><code>SELECT movie_id, star_id, COUNT(*) FROM xxx GROUP BY (movie_id + '-' + star_id) HAVING COUNT(*) > 1
</code>

我是有一个和你差不多的,但是我高并发,一分钟3000条数据入库。
我是先将数据放memcahe里面,
每个入库的先匹配,
如果没有,就入库,
如果有的,比较数据时间戳,再做处理。。。。

SELECT distinct movie_id, star_id FROM xxx

<code>SELECT t.id, t.movie_id, t.star_id from xxx AS t LEFT JOIN xxx AS t1 on t.movie_id = t1.movie_id WHERE t.id != t1.id AND t.star_id = t1.star_id
</code>

把xxx换成你的表名,这里的id是主键id,如果你表里没有那就换成time,但是这样可能会造成time也相同的重复数据无法被找到。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn