if not object_id('tempdb..#T') is null --判断是否存在临时表#T
drop table #T --如果存在则删除
go
create table #T --#T是一个临时表,创建存储在系统数据库的tempdb数据库中,用了以后重启数据库服务就会释放.
(
[id] int,
[name] varchar(1),
[memo] varchar(2)
)
go
select * from #T
go
insert into #T
select 1,N'A',N'A1' union all
select 2,N'A',N'A2' union all
select 3,N'A',N'A3' union all
select 4,N'B',N'B1' union all
select 5,N'B',N'B2'
go
select * from #T a where not exists (select 1 from #T where [name]=a.[name] and id<a.id)
--这里的select 1 代表的是一个常量,因为exists返回的是一个boolean值,所以只要一个值就可以了,也就是说也可以是select 2 select 3
该语句执行过程:
首先要知道not exists是不存在的意思
比如定位到 1,N'A',N'A1' 时,在表里找到name='A',并且不存在id比这条记录还小的记录就返回真.显然这个满足
以下两条不满足,因为name='A'时,还有一个id=1
2,N'A',N'A2'
3,N'A',N'A3'
这些语句都是取Name相同ID最小的记录(推荐用1,2,3),方法3在SQL05时,效率高于1、2
方法2:自联接的方式
select a.* from #T a join (select min(id) id,[name] from #T group by [name])b
on a.id=b.id and a.[name]=b.[name]
方法3:
select * from #T a where id=(select min(id) from #T where a.[name]=[name])
方法4:
select a.* from #T a join #T b on a.[name]=b.[name] and a.id>=b.id
group by a.[name],a.id,a.memo having count(1)=1
--取自连接分组后总记录数为1的结果
--having就是对GROUP BY 进行筛选.
--having count(1)=1 筛选出总记录数为1的数据.
--join就是inner join
--count(1)=1 就相当于count(*)=1,count()里面用什么都一样的,不管是某个
--表中存在的字段,还是*,还是1,还是其他什么的都一样的.
分享到:
相关推荐
oracel重复记录只保留一条,提供sql语句与存储过程2种处理方式
Oracle查询重复数据并删除,只保留一条记录.docx
sql 查出一张表中重复...2、查询出所有数据进行分组之后,和重复数据的重复次数的查询数据,先列下: select count(username) as '重复次数',username from xi group by username having count(*)>1 order by userna
查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1)2、删除表中多余的重复记录,...
该文档是本人在实验过程中遇到的一个需求,之后解决了,特此写一个文档,实现一条SQL语句删除数据库某一个表中重复的记录。(重复的记录只保留一条,其他的被删除)
by语句删除重复并保持一条重复记录,解决数据集中有重复记录的问题
在Access中一般只能查找10行大概20条重复记录,这样程序就可以任意指定表及多字段检索重复记录,并把重复的记录移除到一个临时表中,并不是进行真正删除,你可以进行恢复。但是执行第二次查找时则自动删除上次查找的...
C# 用SQL自动记录数据并且查询出某一列有哪些重复数据,本人实际测试能用,欢迎下载使用!
Oracle查询重复数据与删除重复记录方法,Oracle查询重复数据与删除重复记录方法
多表关联一对多查询取最新的一条数据,数据出现重复 由于历史原因,表结构设计不合理;产品告诉我说需要导出客户信息数据,需要导出客户的 所属行业,纳税性质 数据;但是这两个字段却在订单表里面,每次客户下单...
1.先统计统计数据库多少条记录(这个做个数据缓存,如1小时重新统计一次), 2.根据总条数,随机1次,1次性取出20条记录(当然这个就相当于分页了,要求不高的话,这个最快,我用的就是这个); 还有一种方法,随机...
我们可能会出现这种情况,某个表原来设计不周全,导致表...一、对于部分字段重复数据的删除 先来谈谈如何查询重复的数据吧。 下面语句能够查询出那些数据是重复的: select 字段1,字段2,count(*) from 表名 group
是一个简单的sql语句,你可以仿照这个语句查出表里的重复数据。
Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录
现在有了这款【多个Excel合并及重复数据过滤器】软件,你就可以轻松去除重复数据了。 1)你可以导入多个,甚至是大量EXCEL文档,几个、几十个、几百个... 2)导入数据后,你可以选择对某列数据进行过滤,去除重复...
为了有效解决数据清洗领域中相似重复记录的检测问题,提出了一种基于遗传神经网络的相似重复记录检测方法。 该方法计算两条记录对应字段间的相似度,构建基于神经网络的检测模型,利用遗传算法对网络模型的权值进行...
删除重复记录的方法原理:在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会...
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
注:此处“重复”非完全重复,意为某字段数据重复 HZT表结构 ID ... 过滤重复记录(只显示一条) Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title) 注:此处显示ID最大一条记录 二. 删除重复记录
本文讲一下数据库中通常存在一些冗余数据,如重复记录就是一种,那这样的记录如何删除呢?