-
查找数据库中重复数据
T-SQL
=====
===
第一篇
=========
在
一张表中某个字段下面有重复记录,
有很多方法,
但是有一个方
法,
是比较高
效的,如下语句:
select data_guid from adam_entity_datas
a where > (select min
() from
adam_entity_datas b where _guid = _guid)
如果表中有大量数据,但是重复数据比较少,那么可以用下面的语句提高效率
select data_guid from adam_entity_datas
where data_guid in (select da
ta_guid
from adam_entity_datas group by data_guid having
count(*) >
1)
此方法查询出所有重复记录了,
也就是说,
只要是重复的就选出来,
下
面的语句
也许更高效
select
data_guid from adam_entity_datas where rowid in
(select rid fr
om (select rowid
rid,row_number()over(partition by data_guid order
by
rowid) m from adam_entity_datas)
where m <> 1)
目前只知道这三种比较有效的方法。
第一种方法比较好理解,
但是最慢,
第二种方法最快,
但是选出来的记录是所有
重复的记录,而不是一个重复记录的列表,第三
种方法,我认为最好。
========
第二篇
=========
select
usercode,count(*) from ptype group by
usercode h
aving count(*) >1
========
第三篇
=========
找出重复记录的
ID:
select ID from
(
select ID ,count(*) as Cnt
from
要消除重复的表
group by
ID
) T1
where >1
删除数据库中重复数据的几个方法
数据库的使用过程中由于程序方面的问题
有时候会碰到重复数据,
重
复数据导致了数据库部分设置不能正
确设置??
方法一
declare @max integer,@id
integer
declare cur_rows
cursor local for select
主字段
,count(*) from
表名
group by
主字段
having count(*)
> 1
open
cur_rows
fetch
cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount
@max
delete
from
表名
where
主字段
= @id
fetch cur_rows into
@id,@max
end
close cur_rows
set rowcount 0
方法二
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,
二是部分关键字段重复的记录,比如
Name
字段重复,而
其他字段不一定重复或
都重复可以忽略。
1
、对于第一种重复,比较
容易解决,使用
select
distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录,可以按以下方法删除
select distinct * into #Tmp from
tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
2
、这类重复问题通常要求保留重复记录中的第一条记录,
*
作方法如下
假设
有重复的字段为
Name,Address
,要求得到这两个字
段唯一的结果集
select identity(int,1,1) as autoID, *
into #Tmp from
tableName
select min(autoID) as
autoID into #Tmp2 from #Tmp group by
Name,autoID
select * from
#Tmp where autoID in(select autoID from
#tmp2)
最后
一个
select
即得到了
Name<
/p>
,
Address
不重复的结果集
更改数据库中表的所属用户的两个方法
大家可能会经常碰到一个数据库备份还原到另外一台机器结果导致所有的表都
不
能打开了,原因是建表的时候采用了当时的数据库用户??
========
第四篇
=========
如何查询数据库中的重复记录?
比如说有个表中的数据是这样:
---------
a
a
a
b
b
c
---------
查询出的结果是:
记录
数量
a 3
b 2
c 1
怎样写这个
SQL
语句?
-----------------------
select distinct(name),count(*) from
tabname group by name;
-------------------------------------
想出来了,这样就可以排序了。
select a1,count(a1) as total from
tablename group by a1 order by to
tal
desc
--------------------------------------
select distinct(a1),count(a1) as total
from tablename group by a1 ord
er by
total desc
加个
distinct
更有效率
-------------------
-------------------------------------------
select p.*, m.* from table1 p left join
table2 m on 1=2 w
here 3='#$$#@%$$@' order
by 3 asc limit 10
就类似这么写
========
第五篇
=========
如何查找数据库中的重复记录
?
能在
Access
中用的方法
-------------------------------------------
--------------------------
-
select *
from
表
A inner join (select
字段
1,
字段
2
from
表
group by
字
段
1,
字段
2 having
Count(*)>1) B on A.
字段
1=B.
字段
1 and A.
字段
< br>2=B.
字段
2
-----
--------------------------------------------------
-
问题:
根据其中几个字段判断重
复,
只保留一条记录,
但是要显示全部字段,
< br>怎么查询,
谢谢!!
比如
字段
1
字段
2
字段
3
字段
4
a b
c 1
a b c 1
a b d 2
a
b d 3
b b d
2
想得到的结果为
a
b c 1
a b d
2
(或者
3
)
b b d 2
说明,
根据字段
1
,
2,3
< br>组合不重复,字段
4
不考虑,得到了
< br>3
个记录
但是也要显示字段
4
。
方法一:
可以用临时表的方法来解决:
e
e
表
2
where 1=2
e
字段
1,
字段
2,
字段
p>
3) SELECT DISTINCT
表
2.
字段
1,
表
< br>2.
字段
2,
表
2.
字段
3
FROM
表
2;
e
表
2 O
N (
表
2.
字段
1 =
temptable.
字段
1) AND (
< br>表
2.
字段
2 =
temptable.
字段
2)
AND (
表
2.
字段
3 =
temptable.
字段
3) SET
temptable.
字段
4 = [
表
2].[
字段
4];
方法二:
可以直接使用一个
SELECT
查询筛选出需要的数据:
可以假定第四字段都选值最小的
SELECT [1],[2], [3], Min([4]) AS Min4
FROM
表
1
GROUP BY
表
1.[1],
表
1.[2],
表
1.[3];
问题:
表
2
id NAME r1 r2
1 1
w ee
1 1 1 1232
1 2 123 123
1
2 12 434
1 2 123 123
2 1 123 123
ID
为数值,
NAME
为字符。每条记录没有唯一标识。
要求取得
ID
和
NAME
合并后不重复的记录,
如有重复保留其中一条即可,
但要
显示
所有记录。
回答:
SELECT a.*, (select top 1 r1 from
表
2 as a1 where = and
a1.
name=) AS r1, (select top 1 r2 from
表
2 as a2 where =
and =) AS r2
FROM [SELECT DISTINCT
表
,
表
FROM
表
2]. AS a;
SELECT a.*,
dlookup(
表
2
e &
表
2
name &
FROM [SELECT DISTINCT
表
,
表
FROM
表
2]. AS a;
注意,上述代码中由于没有唯一标识列,因此显示的
R1
R2
的先后次序无从确
定,
一般是按
输入的先后顺序,
但是微软没有官方资料说明到底按哪个顺序,
请
网友注意。
请注意,
上述表
2
为没有唯一标识字段,
< br>如果现在再建立一个自动编号字段
“主
键”则可以用以下
代码
SELECT , , b.r1, b.r2,
b.
主键
FROM
(SELECT
表
,
表
, Min(
表
2.
主键
) AS
主键
FROM
表
2
GROUP BY
表
,
表
)
AS a inner JOIN
表
2 AS b ON a
.
主键
=b.
主
键
;
========
第六篇<
/p>
=========
1.
查询数据库中重复的记录
:
select realname,count(*) from users
group by realname having count
(*)>1
p>
========
第七篇
========
=
SELECT de, me FROM OITM T0 WHERE
exists (select 1 f
rom OITM A where RS =
RS And de < >
ode)
========<
/p>
第八篇
=========
相信很多人
在查询数据库时都会碰到检索某表中不重复记录的时候
,
提到检
索不
重复记录
,
马上想到的肯定是
p>
Distinct
或者
Group
By
分组
,
小弟在初次使用的时候碰
到了一些麻烦
,
这里拿出来与大家分享
,
希望对更多的
朋友有所帮助
!
先看看数据库表结构:
表名
: TEST
字段
: Id,A,B,C,D
其中
B
字段包含重复值
;
Id
A B
C D
1
11 a
34 bvb
2
22 a
35 fgfg
3
33 d
ht sdf
4
44 a
345 de
5
55 c
sfsf sscv
6
66 b
rt fg
下面我们来看看用什么样的
SQL
语句检索出
不含重复记录的数据
:
-
-
-
-
-
-
-
-
-
上一篇:小学 三年级语文缩句的方法
下一篇:股票综合分析方法