`

筛选数据库重复记录

阅读更多

请问以下两个功能如何实现?  
  (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
)
 

 

 

 

分享到:
评论

相关推荐

    删除数据表中重复记录

    本文将详细介绍如何在不同的数据库系统(如MySQL、SQL Server、Oracle等)中删除重复记录。 #### SQL删除重复记录的基本思路 删除重复记录的核心思想是先识别出哪些记录是重复的,然后通过某种方式将这些重复记录...

    删除数据库中重复的数据(只保留一条)

    在数据库管理过程中,经常会遇到需要清理数据的情况,其中一种常见需求就是删除数据库中的重复记录,同时确保每条数据的关键字段只保留一条记录。这种操作在维护数据一致性、提高查询效率等方面具有重要意义。根据...

    sql查询重复记录方法大全

    在数据库管理与维护过程中,查询和处理重复记录是一项非常重要的工作。本文将详细介绍几种常见的SQL查询重复记录的方法,并提供具体的示例代码。 #### 方法一:查询具有重复值的记录(返回所有重复记录) **SQL...

    最高效的删除重复记录方法

    在数据库管理过程中,删除重复记录是一项常见的需求,尤其是在数据清洗、维护数据一致性等方面。本文将详细介绍一种高效的方法来删除Oracle数据库中的重复记录,并通过具体的SQL语句示例来帮助读者理解和掌握这种...

    从mysql数据库中挑选重复用户

    在处理大量数据时,经常会遇到需要找出数据库中重复记录的情况。这对于数据清洗、数据分析以及确保数据质量都非常重要。本文将详细介绍如何使用SQL语句来查找MySQL数据库中的重复用户。 #### 核心SQL查询语句解析 ...

    去除重复记录

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

    查找删除重复记录

    在数据库管理中,重复记录是指数据库表中的数据项完全相同或部分关键字段相同的多条记录。这些重复的数据可能会导致数据统计不准确、占用额外的存储空间等问题,并且在处理大量数据时可能会影响系统的性能。 #### ...

    查询重复数据sql语句

    - 当只需要知道是否存在重复数据而不需要具体的重复记录时,可以使用`COUNT(DISTINCT column_name)`。 - 示例:`SELECT COUNT(DISTINCT id) FROM a;` ### 总结 本文详细介绍了如何使用SQL查询表中的重复数据,...

    oracle 查询重复数据

    具体来说,通过使用`GROUP BY`子句结合`COUNT()`函数,可以统计每个唯一标识符(如`peopleid`)出现的次数,再利用`HAVING`子句筛选出出现次数大于1的标识符,从而定位到重复记录。 ### SQL语句解析 #### 基础SQL...

    Oracle查询重复数据与删除重复记录方法

    此查询语句通过子查询找出每组重复记录中ROWID最小的那条记录,并在外部查询中筛选出除ROWID最小之外的其他重复记录。 ##### 2. 使用GROUP BY方法 **查询重复数据示例** 使用`GROUP BY`方法时,可以通过计算每组...

    数据库实现按字母查找

    在进行拼音首字母转换后,函数通过`like 'Z%'`这样的SQL语句来筛选出所有拼音首字母为“Z”的记录。这种基于首字母的排序和检索方式,可以显著提高数据库的查询性能,尤其是在处理大量数据时。 #### 4. 动态SQL与...

    易2.55版数据库记录编辑器模块.rar

    《易2.55版数据库记录编辑器模块》是一款专为数据库管理设计的专业工具,它提供了强大的记录编辑功能,能够帮助用户高效地管理和修改数据库中的数据。在这个版本中,开发者针对用户需求进行了诸多优化和升级,提升了...

    Oracle中用Rowid查找和删除表中的重复记录

    在Oracle数据库管理中,处理重复记录是一项常见的需求,尤其是在数据量较大的情况下。本文将详细介绍如何利用Rowid这一特性来有效地查找和删除表中的重复记录。 #### Rowid的概念 Rowid是Oracle数据库中用于唯一...

    多行多列筛选不重复值新探讨共2页.pdf.zip

    标题和描述中的“多行多列筛选不重复值新探讨共2页”表明这是一个关于电子表格处理的主题,可能涉及到Excel或其他类似的数据管理工具。在这个话题中,重点是学习如何在多行多列的数据中有效地去除重复值,以确保数据...

    sql_查询重复记录方法大全.txt

    根据提供的文件信息,我们可以深入探讨SQL中查询重复记录的各种方法及其应用场景。首先,我们来解析一下文件中的示例代码,并在此基础上进一步扩展相关的知识点。 ### 查找所有重复标题的记录 文件中的第一个示例...

    (参考)查询和删除同一表内一个或多个字段重复记录的SQL语句.pdf

    在数据库管理和数据清洗的过程中,有时我们需要处理表内的重复记录。这些重复记录可能会影响数据的准确性,导致统计分析出错。本文将详细介绍如何使用SQL语句查询并删除同一表内一个或多个字段的重复记录。 首先,...

    MySQL数据库PDF文档

    主键约束是指对表中的每一条记录的唯一标识,非空约束是指某个字段不能为null,唯一性约束是指某个字段的值不能重复。 查询语言 查询语言是指对数据库表中的数据进行查询和提取的语言。常见的查询语言包括SELECT...

    数据库客户端工具A5 sql

    - history.txt:可能包含了用户的查询历史记录,方便用户回顾和重复执行先前的SQL语句。 - readme.txt:通常包含软件的使用说明、注意事项或者版本信息,是初次使用时应该查阅的重要文档。 - VirusCheck.txt:可能是...

    中文Access数据库应用教程_数据库开发师

    1. 数据库基础概念:了解数据库的基本原理,包括关系型数据库模型、数据表、字段、记录和键的概念。在Access中,这些元素构成了数据库的基础架构。 2. 创建数据库:学习如何从头开始创建一个新的Access数据库,包括...

Global site tag (gtag.js) - Google Analytics