日期:2014-05-17  浏览次数:20506 次

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

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

------解决方案--------------------
有收获

引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

--数据量不大可用希哈
--BINARY_CHECKSUM/CHECKSUM
select * from T1 a 
where BINARY_CHECKSUM(a.a,a.b) in (select BINARY_CHECKSUM(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
*/

怎么查询某张表占用多少物理空间