sql中查询重复记录与删除重复记录

1。查找全部重复记录

 代码如下 复制代码

Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)

2。过滤重复记录(只显示一条)

 代码如下 复制代码

Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)

注:此处显示ID最大一条记录

SQL Server删除重复行是我们最常见的操作之一,下面就为您介绍六种适合不同情况的SQL Server删除重复行的方法,供您参考。

1.如果有ID字段,就是具有唯一性的字段 

 代码如下 复制代码

delect   table  tableName  where   id   not   in   (   select   max(id)   from   table   group   by   col1,col2,col3...   )    

group   by   子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。 

2. 如果是判断所有字段也可以这样  ,【对于表中的指定的字段的进行检查是否相同】

 代码如下 复制代码

select   *   into   #temp  from   tablename    group   by   id1,id2,....    

delete    tablename      

insert   into   table  select   *   from   #temp 

drop   table   #temp 

3.  首先去重复,再获取N*1条数据插入到临时表中,【对于表中的所有字段的进行检查是否相同】,再将原表的数据删除,然后将临时表的数据插入到原表,最后删除临时表。

 代码如下 复制代码

select   distinct   *   into   #temp   from   tablename      

delete       tablename      

go    

insert   tablename   select   *   from   #temp    

go    

drop   table   #temp 

 

4. 没有ID的情况 

 代码如下 复制代码

select   identity(int,1,1)   as   id,*   into   #temp   from   tabel    

delect   #   where   id   not   in   (    

select   max(id)   from   #   group   by   col1,col2,col3...)    

delect   table    

inset   into   table(...)    

select   .....   from   #temp   

5. col1+','+col2+','...col5 联合主键 

 代码如下 复制代码

select   *   from     table   where   col1+','+col2+','...col5   in   (    

select   max(col1+','+col2+','...col5)   from   table      

where   having   count(*)>1    

group   by   col1,col2,col3,col4      

)   

group   by   子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。 

6.

 代码如下 复制代码

select   identity(int,1,1)   as   id,*   into   #temp   from   tabel    

select   *   from     #temp   where   id   in   (    

select   max(id)   from   #emp   where   having   count(*)>1   group   by   col1,col2,col3...)

其它方法补充

1。删除全部重复记录(慎用)

 代码如下 复制代码

Delete 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)

2。保留一条(这个应该是大多数人所需要的 ^_^)

 代码如下 复制代码

Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)

注:此处保留ID最大一条记录

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

 代码如下 复制代码

select * from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

 代码如下 复制代码

delete from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段)

 代码如下 复制代码

select * from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

 代码如下 复制代码

delete from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

 代码如下 复制代码

select * from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

时间: 2024-11-08 18:58:35

sql中查询重复记录与删除重复记录的相关文章

怎样在vb.net+sql中查询数据表里某一列

问题描述 怎样在vb.net+sql中查询数据表里某一列 解决方案 解决方案二:??不明白你想问的是什么.从字面理解你是想查询某个表的一个列所有内容.SQL:select某字段from表如果是有条件查询,就在表后面加上where字句就可以了解决方案三:觉得和vb没关系,纯sql问题解决方案四:同感

sql查询数据中重复记录并删除重复记录的方法总结

查找所有重复标题的记录:     SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC   一.查找重复记录 1.查找全部重复记录     Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)   2.过滤重复记录(只显示一条

sql查询重复记录、删除重复记录方法大全

查找所有重复标题的记录: ? 1 SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC 一.查找重复记录 1.查找全部重复记录 ? 1 Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1) 2.过滤重复记录(只显示一条) ?

oracle查询重复数据和删除重复记录示例分享_oracle

一.查询某个字段重复 复制代码 代码如下:       select *          from User u         where u.user_name in (select u.user_name                                  from User u                                group by u.user_name   having count(*) > 1) 二,删除表中某几个字段的重复 例:表中有条六条

msyql中查询某个字段的不重复的所有记录

mysql> select * from a; +----+------+--------------+| id | name | descri       |+----+------+--------------+|  1 | a1   | 我是第一个a1 ||  2 | a2   | 我是第一个a2 ||  3 | a3   | 我是a3       ||  4 | a1   | 我是第二个a1 ||  5 | a2   | 我是第二个a2 |+----+------+-----------

sql中查询数据库大小多种方法

第一种:(蟋蟀)  代码如下 复制代码 ALTER TABLE tb   (指定某表的某列) ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CI_AS           --不区分大小写 ALTER TABLE tb   (指定某表的某列) ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CS_AS          --区分大小写 alter database 数据库

三星Galaxy S5如何删除通话记录?S5删除通话记录方法

1.我们可在在桌面进入到联系人或直接到手机中,如下图所示我以手机为例子,点击它. 2.在手机管理界面第二荐会有个记录,我们点击它[记录]如下图所示. 3.然后在记录中我们按一下[菜单]在此就会弹出[查看方式]对话框了,如图所示.   4.然后我们在弹出查看方式中点击[全部通话]如图点击. 5.然后我们点击[菜单]键在弹出菜单点击[删除]按钮,细节如下图所示. 6.接着我们再点击[全选],当然也可以删除部份了,一个个单选  7.之后我们再点击右边的[删除](如果不想删除可以点击取消). 8.最后再

mysql中删除重复记录sql语句

删除重复记录方法一: 1. 新建一个临时表  代码如下 复制代码 create table tmp as select * from youtable group by  name(name为不希望有重复的列) 2. 删除原来的表  代码如下 复制代码 drop table youtable 3. 重命名表  代码如下 复制代码 alter table tmp rename youtable 但是这个方法有个问题,由临时表转变过来的最终表,其表结构会和原来的不一致,需要手工更改.这个问题,待解决

mysql sql DISTINCT 删除重复记录

mysql教程 sql  distinct  删除重复记录 如何在mysql中使用distinct关键字过滤在一个select语句的结果列表重复值 如果你在查询数据时想删除重复的数据,可以利用distinct关键字过滤重复值,下面看下distinct用法. select distinct column_name from table_name; 让我们来看看一个简单的例子,我们有一个汽车列表.每辆车都有一个id,品牌,类型和颜色,但现在我们只是简单的列出所有品牌: select brand fr