关键词不能为空

当前您在: 主页 > 英语 >

sql数据库一些查找删除方法

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-01 07:37
tags:

-

2021年3月1日发(作者:柜台)


查找数据库中重复数据


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



方法二


< p>
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,

二是部分关键字段重复的记录,比如


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

< p>
字段


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,


字段


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


的先后次序无从确


定,


一般是按 输入的先后顺序,


但是微软没有官方资料说明到底按哪个顺序,



网友注意。



请注意,

< p>
上述表


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


========


第七篇


======== =


SELECT de, me FROM OITM T0 WHERE exists (select 1 f


rom OITM A where RS = RS And de < >


ode)


========< /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


语句检索出 不含重复记录的数据


:

-


-


-


-


-


-


-


-



本文更新与2021-03-01 07:37,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/686961.html

sql数据库一些查找删除方法的相关文章