• 你真的会玩SQL吗?删除重复数据且只保留一条


    在网上看过一些解决方法

    我在此给出的方法适用于无唯一ID的情形

    表:TB_MACVideoAndPicture 字段只有2个:mac,content

    mac作为ID,正常情况下mac数据是唯一的,由于操作失误导致数据插入多次,导致出现多个mac,content重复数据,现在只保留一条,删除多余的

    大体思想是给重复数据一个自增ID,过滤出每组里面最小ID,删除原数据中所有重复数据再将最小ID插入

     --查询出所有重复数据,并给定递增id
     SELECT IDENTITY( INT,1,1 ) AS id ,
            mac ,
            content 
     INTO   #tmp
     FROM   TB_MACVideoAndPicture
     WHERE  mac IN ( SELECT    mac
                      FROM      TB_MACVideoAndPicture
                      GROUP BY  mac ,content
                      HAVING    COUNT(*) > 1 )
     ORDER BY mac ,content
     
     
     --删除原表中所有重复数据
     DELETE FROM TB_MACVideoAndPicture
     WHERE  mac IN ( SELECT  mac FROM  #tmp )
     
     --插入id最小的重复数据到原表
     INSERT INTO TB_MACVideoAndPicture
            SELECT  UPPER(mac) mac ,
                    content 
            FROM    #tmp a
            WHERE   id IN ( SELECT  MIN(id)
                            FROM    #tmp b
                            WHERE   a.mac = b.mac AND a.content = b.content
                            GROUP BY mac ,content )
     
    
     DROP TABLE #tmp

    此处用到了临时表

     

  • 相关阅读:
    023 AQS--JUC的核心
    022 Future接口
    021 Callable接口
    020 线程的综合考虑
    019 线程协作
    命令,lldb,llvm,gdb,gcc,
    @class,import,
    arc,自动引用计数,
    写在哪里,
    40岁生日,
  • 原文地址:https://www.cnblogs.com/zhangs1986/p/3759144.html
Copyright © 2020-2023  润新知