`

筛选数据库重复记录

阅读更多

请问以下两个功能如何实现?  
  (1)如何选出重复的记录?  
   
  ID         cname         tc           bm  
  -------------------------  
  1           张三             1            
  2           李四             1  
  3           张三             2           行政  
  4           王五             1  
  5           李四             2           销售  
  6           李六             1  
  7           张八             2           设计  
   
   
  (2)筛选重复的记录,把重复记录的tc为2的bm字段的内容更新到tc为1的相应的姓名中,得到的结果为:  
   
  ID         cname         tc           bm  
  -------------------------  
  1           张三             1           行政  
  2           李四             1           销售  
  4           王五             1  
  6           李六             1  
  7           张八             2           设计

 

-------------------------------------------------------------------------------------------------------------------

 

1、select   cname   ,tc   ,bm   from   tabname   group   by   cname   ,tc   ,bm   having   count(*)   >   1  
   
  2、select   min(ID)   as   ID   ,cname   ,tc   ,bm   from   tabname   group   by   cname   ,tc   ,bm

 

--------------------------------------------------------------------------------------------------------------------

 

什么样的记录算是重复的呢?   猜测是姓名相同的就算重复吧.  
  1.  
  select   表.*   from   表   join   (select   cname,count(cname)   as   num   from   表   group   by   cname   having   count(cname)>1)   a  
  on   表.cname=a.cname  
   
   
  -------------------------------  
   
  5 李四 2 销售  
  2 李四 1    
  1 张三 1    
  3 张三 2 行政  

 

-----------------------------------------------------------------------------------------------------------------------

 

姓名相同的为重复记录

 

-----------------------------------------------------------------------------------------------------------------------

 

update   表   set   bm=a.bm   from    
  (  
  select   表.*   from   表   join   (select   cname,count(cname)   as   num   from   表   group   by   cname   having   count(cname)>1)   a  
  on   表.cname=a.cname  
  )   a   where   表.cname=a.cname   and   表.tc=1  
   
  update   表   set   bm=''   from    
  (  
  select   表.*   from   表   join   (select   cname,count(cname)   as   num   from   表   group   by   cname   having   count(cname)>1)   a  
  on   表.cname=a.cname  
  )   a   where   表.cname=a.cname   and   表.tc=2

 

-------------------------------------------------------------------------------------------------------------------------

 

楼上的不行

 

--------------------------------------------------------------------------------------------------------------------------

 

自己顶...

 

--------------------------------------------------------------------------------------------------------------------------

 

1.找出重复记录  
  select   *   from   表   a   where   exists   (select   1   from   表   where   cname=a.cname   group   by   cname   having   count(cname)>1)  
   
  2.替换  
  update   表   set   bm=c.bm   from    
  (select   b.*   from   表   b   join    
  (select   cname,max(tc)   as   tc   from   表   a   where   exists   (select   1   from   表   where   cname=a.cname   group   by   cname   having   count(cname)>1)  
  group   by   cname  
  )   a   on   b.cname=a.cname   and   b.tc=a.tc  
  )   c   where   表.cname=c.cname   and   表.tc=1  
   
  3.删除重复记录    
  delete   from   表   where   id   in    
  (  
  select   a.id   from   表   a   join    
  (  
  select   cname,min(tc)   as   tc   from   表   a   where   exists   (select   1   from   表   where   cname=a.cname   group   by   cname   having   count(cname)>1)  
  group   by   cname  
  )   b  
  on   a.cname=b.cname   and   a.tc=b.tc  
  )  

 

--------------------------------------------------------------------------------------------------------------------------

 

哦,第三步不对,不是删除重复,而是  
  update   表   set   bm=''   from    
  (select   b.*   from   表   b   join    
  (select   cname,min(tc)   as   tc   from   表   a   where   exists   (select   1   from   表   where   cname=a.cname   group   by   cname   having   count(cname)>1)  
  group   by   cname  
  )   a   on   b.cname=a.cname   and   b.tc=a.tc  
  )   c   where   表.cname=c.cname   and   表.tc=2

----------------------------------------------------------------------------------------------------------------------------

 

自己在用的,SQLServer 与 Oracle通用:

 

查找所有重复记录:

 

select * from customer c inner join (
select acc,no from customer where active=1 group by acc,no having count(*) > 1
)t on c.acc=t.acc and c.no=t.no

 

更新所有重复记录:

 

update customer set active = 0 where id in(
	select id from customer c inner join (
	select acc,no from customer where active=1 group by acc,no having count(*) > 1
	)t on c.acc=t.acc and c.no=t.no
)
 

 

 

 

分享到:
评论

相关推荐

    去除重复记录

    sql server可以去除数据库重复记录,增加统计数据库的有效性

    用SQL语句查询数据库中某一字段下相同值的记录方法

    今天接到一任务,有一张学生信息表(Excel表),里面有一万多条记录,现在要把这张表导入到数据库中,并设置学生学号为主键,但是现在这张表中的学生学号有重复的记录,我必须先找出这些重复的记录,然后再进行筛选,...

    mysql 数据表中查找重复记录

    多表update sql语句总结mysql锁表和解锁语句分享MySQL中基本的多表连接查询教程MySQL表字段设置默认值(图文教程及注意细节)MySQL中使用表别名与字段别名的基本教程mysql查询表里的重复数据方法mysql 导入导出数据库...

    Access 2000数据库系统设计(PDF)---025

    1256.2.4 删除表排序次序和解冻列 1256.3 查找表中的匹配记录 1266.4 自动地替换匹配的字段值 1276.5 筛选表数据 1286.5.1 按选定内容筛选 1286.5.2 按窗体筛选 1306.5.3 高级筛选和排序 1326.5.4 添加一个多字段...

    数据库操作语句大全(sql)

    19、说明:删除重复记录 1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...) 2),select distinct * into temp from tablename delete from tablename insert into...

    MySQL 去除重复数据实例详解

    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均都重复,二是部分字段重复的记录。对于第一种重复,比较容易解决,只需在查询语句中使用distinct关键字去重,几乎所有数据库系统都支持distinct操作。...

    Access 2000数据库系统设计(PDF)---002

    101.6 浏览和编辑子数据表中的相关记录 111.7 使Jet和SQL Server 7.0/MSDE数据库 相一致 111.8 Access在2000年问题上的改进 121.8.1 四位数年份选项设置 121.8.2 数据库窗口 131.8.3 窗体和报表 141.8.4 名称自动...

    Access 2000数据库系统设计(PDF)---018

    1256.2.4 删除表排序次序和解冻列 1256.3 查找表中的匹配记录 1266.4 自动地替换匹配的字段值 1276.5 筛选表数据 1286.5.1 按选定内容筛选 1286.5.2 按窗体筛选 1306.5.3 高级筛选和排序 1326.5.4 添加一个多字段...

    Access 2000数据库系统设计(PDF)---003

    101.6 浏览和编辑子数据表中的相关记录 111.7 使Jet和SQL Server 7.0/MSDE数据库 相一致 111.8 Access在2000年问题上的改进 121.8.1 四位数年份选项设置 121.8.2 数据库窗口 131.8.3 窗体和报表 141.8.4 名称自动...

    Access 2000数据库系统设计(PDF)---011

    1256.2.4 删除表排序次序和解冻列 1256.3 查找表中的匹配记录 1266.4 自动地替换匹配的字段值 1276.5 筛选表数据 1286.5.1 按选定内容筛选 1286.5.2 按窗体筛选 1306.5.3 高级筛选和排序 1326.5.4 添加一个多字段...

    Access 2000数据库系统设计(PDF)---020

    1256.2.4 删除表排序次序和解冻列 1256.3 查找表中的匹配记录 1266.4 自动地替换匹配的字段值 1276.5 筛选表数据 1286.5.1 按选定内容筛选 1286.5.2 按窗体筛选 1306.5.3 高级筛选和排序 1326.5.4 添加一个多字段...

    Access 2000数据库系统设计(PDF)---009

    101.6 浏览和编辑子数据表中的相关记录 111.7 使Jet和SQL Server 7.0/MSDE数据库 相一致 111.8 Access在2000年问题上的改进 121.8.1 四位数年份选项设置 121.8.2 数据库窗口 131.8.3 窗体和报表 141.8.4 名称自动...

    Access 2000数据库系统设计(PDF)---001

    101.6 浏览和编辑子数据表中的相关记录 111.7 使Jet和SQL Server 7.0/MSDE数据库 相一致 111.8 Access在2000年问题上的改进 121.8.1 四位数年份选项设置 121.8.2 数据库窗口 131.8.3 窗体和报表 141.8.4 名称自动...

    自己编写的arcgis 工具集 可用于村庄地籍数据库自动赋界址线位置

    界址线类别可以通过ArcMap的空间筛选批量添加在界址线图层的界址线类别字段中,并不费事所以就没必要编写代码了。 界址线赋位置之前,界址线图层界址线类别字段必须上好。界址线位置完全根据界址线图层的界址线类别...

    Access 2000数据库系统设计(PDF)---012

    1256.2.4 删除表排序次序和解冻列 1256.3 查找表中的匹配记录 1266.4 自动地替换匹配的字段值 1276.5 筛选表数据 1286.5.1 按选定内容筛选 1286.5.2 按窗体筛选 1306.5.3 高级筛选和排序 1326.5.4 添加一个多字段...

    Access 2000数据库系统设计(PDF)---015

    1256.2.4 删除表排序次序和解冻列 1256.3 查找表中的匹配记录 1266.4 自动地替换匹配的字段值 1276.5 筛选表数据 1286.5.1 按选定内容筛选 1286.5.2 按窗体筛选 1306.5.3 高级筛选和排序 1326.5.4 添加一个多字段...

    Access 2000数据库系统设计(PDF)---027

    1256.2.4 删除表排序次序和解冻列 1256.3 查找表中的匹配记录 1266.4 自动地替换匹配的字段值 1276.5 筛选表数据 1286.5.1 按选定内容筛选 1286.5.2 按窗体筛选 1306.5.3 高级筛选和排序 1326.5.4 添加一个多字段...

    Access 2000数据库系统设计(PDF)---026

    1256.2.4 删除表排序次序和解冻列 1256.3 查找表中的匹配记录 1266.4 自动地替换匹配的字段值 1276.5 筛选表数据 1286.5.1 按选定内容筛选 1286.5.2 按窗体筛选 1306.5.3 高级筛选和排序 1326.5.4 添加一个多字段...

    Access 2000数据库系统设计(PDF)---029

    1256.2.4 删除表排序次序和解冻列 1256.3 查找表中的匹配记录 1266.4 自动地替换匹配的字段值 1276.5 筛选表数据 1286.5.1 按选定内容筛选 1286.5.2 按窗体筛选 1306.5.3 高级筛选和排序 1326.5.4 添加一个多字段...

    MySQLMTOP数据库监控工具 2.2.zip

    MySQLMTOP 2.2 更新记录:1.google字体样式本地化,解决字体加载慢的问题2.python脚本执行方式修改由./python script更新为python script3.复制监控支持gtid模式的监控4.修复复制延时无法报警的问题5.修复进程监控里...

Global site tag (gtag.js) - Google Analytics