Heim  >  Artikel  >  Backend-Entwicklung  >  SQL如何查找数据库多栏位重复数据?

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

WBOY
WBOYOriginal
2016-06-06 20:39:081074Durchsuche

首先,我有一个电影数据库,这是其中的一部分:
[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也相同的重复数据无法被找到。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn