一般情况下,数据库去重复有以下那么三种方法:
第一种:
两条记录或者多条记录的每一个字段值完全相同,这种情况去重复最简单,用关键字distinct就可以去掉。例:
SELECTDISTINCTFROMTABLE
第二种:
两条记录之间之后只有部分字段的值是有重复的,但是表存在主键或者唯一性ID。如果是这种情况的话用DISTINCT是过滤不了的,这就要用到主键id的唯一性特点及groupby分组。例:
SELECTFROMTABLEWHEREIDIN(SELECTMAX(ID)FROMTABLEGROUPBY[去除重复的字段名列表,])
第三种:
两条记录之间之后只有部分字段的值是有重复的,但是表不存在主键或者唯一性ID。这种情况可以使用临时表,讲数据复制到临时表并添加一个自增长的ID,在删除重复数据之后再删除临时表。例:
//创建临时表,并将数据写入到临时表
SELECTIDENTITY(INT1,1)ASID,INTONEWTABLE(临时表)FROMTABLE
//查询不重复的数据
SELECTFROMNEWTABLEWHEREIDIN(SELECTMAX(ID)FROMNEWTABLEGROUPBY[去除重复的字段名列表,])
//删除临时表
DROPTABLENEWTABLE
(1)查找有没有重复数据可以用去重统计(distanct+count)和本身的统计数据(count)对比,二者数据不同,那么就说明有重复数据。(2)重复数据有哪些,可以用全体分组(group by+count)只要不等于1的就是就是重复数据
(3)在所有数据中显示重复数据。要用到开窗函数rank()over(group by 全体字段),这样可以给每条数据的前面都加上编号,也就是说只要前面的编号不是1,那么这条数据就是重复的。select data_guid from adam_entity_datas
where data_guid in (select data_guid from adam_entity_datas
group by data_guid having count() > 1)你是要查找数据库中某个字段下的相同数据吧,我给你写2个例子
(数据库执行效率高)
select from dboMediafileInfo as a where
(VideoDownUrl IN (SELECT VideoDownUrl FROM MediafileInfo AS B WHERE AProgramID <> BProgramID))
(数据库执行效率低)
SELECT
FROM MediafileInfo AS A
WHERE (SELECT COUNT() FROM MediafileInfo WHERE VideoDownUrl=AVideoDownUrl)>1使用group进行分组来实现。
例句:
select a,count() from table group a ;
显示的结果,a就是重复的值,count()就是重复的次数。
该SQL在Oracle、Sql Server等数据库都适用。
若要筛选重复几次的重复值,则可对sql进行变动。
比如要显示重复3次以及3次以上的资料,
例句:
select a,count() from table group a having count()>=3;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)