数据库 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值