ygbook等小说站采集到重复的数据怎么办?

就是连URL都一样的那种(名字一样的也可以参考处理),怎么办呢?

当然是要删掉了。

1、首先查一下看看重复了多少,按url分组,并且count大于1的就说明是重复的。

select url,count(*) from yg_articles t group by t.url having count(*)>1

2、我这里查到是有1500条重复,都是重复了1次,那么我们就把id大的那个删掉就行,先把大id查出来

select max(id) from yg_articles t group by t.url having count(*)>1

3、然后把大id删掉

delete from yg_articles 
where id in (select max(id) from yg_articles t group by t.url having count(*)>1)

不出意外的报错了,[Err] 1093 - You can't specify target table 'yg_articles ' for update in FROM clause
不要慌,这个意思是说,你不能用yg_articles的子查询来删yg_articles,典型的我杀我自己,这样容易死锁,所以被禁用了

怎么办呢?两个方法,一种是搞个临时表b,把查到的结果先insert进去,然后delete from yg_articles where id in (select id from b)就搞定了。

还有一种更简单的,就是把子查询弄个别名,当成一个子表b来用,效果也是一样。
先select验证一下出来的条数对不对,我有一次不小心写错sql就删除了全表(还好有备份)

select * from yg_articles 
where id in (
   select id from (select max(id) id from yg_articles t group by t.url having count(*)>1) b
)

然后执行删除,真正执行前,一定要先备份,一定要先备份,一定要先备份,

delete from yg_articles 
where id in (
   select id from (select max(id) from yg_articles t group by t.url having count(*)>1) b
)

是不是so easy。

最后,如果你重复的不是2个,而是3个、4个怎么办呢?删最大的,删完了还是有重复的。
——那就多执行几次。最后他就只剩一个了。

或者你反着写一下sql,删除所有存在重复的id,并且not id 最小id的子查询,这样就可以一次搞定。

#扣扣376665005
delete from yg_articles 
where url in (
   select url from (select url from yg_articles t group by t.url having count(*)>1) b
)
and id not in (
   select id from (select min(id) as id from yg_articles t group by t.url having count(*)>1) c
)

觉得好就转、评、赞随便来个吧,关注一下也是可以的~

bye bye~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。