天天看點

資料庫 sql 查詢重複記錄(sql server)

一張表中有Id,Name,Age 三個字段

1、查詢出name,age 重複的所有資料:

--查詢資料庫的重複記錄(多列)
	select  a.*
	from [dbo].[People]  a
	inner join (
			select a.Name,a.Age
		from [dbo].[People] a
		group by a.Name,a.Age
		having COUNT(*)>1
	)b on a.Name=b.Name and a.Age=b.Age
           

2、删除資料庫的重複的多餘記錄:

--删除資料庫的重複的 [多餘] 記錄

	--查詢重複的記錄 放入臨時表 #ptable
	select a.* into #ptable
	from [dbo].[People]  a
		inner join (
			select a.Name,a.Age
		from [dbo].[People] a
		group by a.Name,a.Age
		having COUNT(*)>1
	)b on a.Name=b.Name and a.Age=b.Age


	--查詢重複裡面要保留的記錄  ,放入臨時表 #ptable2
		select a.Name,a.Age,min(a.Id) otid into #ptable2
	from #ptable a
	group by a.Name,a.Age

	--查詢重複裡面要删除的記錄,删除
	delete [dbo].[People]
	where Id in (
			select a.Id
		from #ptable a
		where a.Id not in (
		select a.otid
		from #ptable2 a
		)
	)

	--删除臨時表
		drop table #ptable
			drop table #ptable2