先去重復後放入臨時表 select distinct a,b into #t from table 再刪除原表數據 delete from table 再把臨時表中的數據插入到原表 insert into table select * from #t
祇要有第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
在几千条记录里,存在着些相同的记录,如何能用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
select distinct a,b into #t from table
再刪除原表數據
delete from table
再把臨時表中的數據插入到原表
insert into table
select * 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
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