美文网首页seo
ygbook等小说站采集到重复的数据怎么办?

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

作者: 老胡聊聊天 | 来源:发表于2020-09-17 01:59 被阅读0次

    就是连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~

    相关文章

      网友评论

        本文标题:ygbook等小说站采集到重复的数据怎么办?

        本文链接:https://www.haomeiwen.com/subject/uwmkyktx.html