如题,怎么样使用Sql语句清除数据库某张表中的重复记录
例表有两个(字段A,字段B)如果这两个字段同时拥有相同的重复记录则删除

解决方案 »

  1.   

    先去重復後放入臨時表
    select distinct a,b into #t from table
    再刪除原表數據
    delete from table
    再把臨時表中的數據插入到原表
    insert into table 
    select * from #t
      

  2.   

    祇要有第3個字段可以區分重複記錄就可以了假設第3個字段為Cselect * from 表 t
    where not exists(select 1 from 表 where A = t.A and B = t.B and C < t.C)
    --上面的 C < t.C 也可以換成 C > t.C
      

  3.   

    在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢?谢谢!
    1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
    select * from people
    where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
    delete from people 
    where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)
    and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)3、查找表中多余的重复记录(多个字段) 
    select * from vitae a
    where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having count(*) > 1)4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
    delete from vitae a
    where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
    and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
    select * from vitae a
    where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
    and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)6、删除(多字段)重复记录
    IF (SELECT object_ID('tempdb.dbo.#Test'))>0 DROP TABLE #Test SELECT IDENTITY (INT,1, 1) AS FID, JobID,FlashTime
     INTO #Test
      FROM HFlashCardRecord 
      WHERE FlashTime between '2004-11-16' and '2004-11-18' 
      ORDER BY Cast(JobID as NUMERIC(18,0)),FlashTime DELETE FROM #Test WHERE FID IN(
     SELECT MAX(FID) FROM #Test
      GROUP BY FlashTime, JobID HAVING COUNT(FID)>1

    SELECT * FROM #Test