首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于查寻重复记录

2013-11-29 
关于查找重复记录select * from T1 a where (a.a,a.b) in (select a,b from T1 group by a,b having count

关于查找重复记录
select * from T1 a 
where (a.a,a.b) in (select a,b from T1 group by a,b having count(*) > 1) 

查找重复记录,上面的语句错在哪? 有收获

还有这等功能,大版锅锅,多少数据量不能用这个方式?

没有固定判断标准,这要看列值大小.个人观点:不返回结果集的情况下,不要超过1秒
通常处理数据时会用到这类判断,常用接口还是直接用exists,如果要用这方法在维护成本上要考虑是否值得,在表加多一列希哈处理建上索引你是说加个计算列?
对,如果列名的是字符类型,值比较大时,可以考虑用

在项目开发时,主要考虑:
比如参数不定,值不固定时,如:开发一个审批系统,处理所有系统和审批规则,把接口传入一堆参数生成一个希哈,直接和希哈列匹配。
[解决办法]
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-11-27 14:03:25
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
--Dec 28 2012 20:23:12 
--Copyright (c) Microsoft Corporation
--Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[T1]
if object_id('[T1]') is not null drop table [T1]
go 
create table [T1]([ID] int,[a] varchar(1),[b] varchar(1),[c] varchar(1))
insert [T1]
select 22,'q','w','e' union all
select 24,'q','w','e' union all
select 25,'q','w','e' union all
select 27,'s','d','f' union all
select 29,'a','s','d' union all
select 31,'a','s','d'
--------------开始查询--------------------------

select max(id) id ,a,b,c
from t1
group by a,b,c
----------------结果----------------------------
/* 
id          a    b    c
----------- ---- ---- ----
31          a    s    d
25          q    w    e
27          s    d    f
*/

[解决办法]
或者这样也行:
create table t1(ID  int, a varchar(10),    b  varchar(10),   c varchar(10)
)

insert into T1    
select 22 ,  'q',     'w',    'e'
union all select 24 ,  'q',     'w',    'e'
union all select 25 ,  'q',     'w',    'e'
union all select 27 ,  's',     'd',    'f'
union all select 29 ,  'a',     's',    'd'
union all select 31 ,  'a',     's',    'd' 


delete t1
from t1
inner join
(
select a,b,c,min(ID) id
from T1
group by a,b,C
)tt
on tt.a = t1.a and
   tt.b = t1.b and
   tt.c = t1.c and
   tt.id <> t1.id 

select * from t1
/*
IDabc
22qwe
27sdf
29asd
*/

热点排行