`
黑色牧马
  • 浏览: 10392 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

查询或删除表中相同的记录

 
阅读更多
比如现在有一人员表(表名:peosons) 若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来   
select p1.* from persons p1,persons p2   
where p1.idp2.id and p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address 可以实现上述效果.   
几个删除重复记录的SQL语句   
1.用rowid方法   
2.用group by方法   
3.用distinct方法   
1.用rowid方法   
据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:   
查数据:   
     select * from table1 a where rowid !=(select   max(rowid)   
     from table1 b where a.name1=b.name1 and a.name2=b.name2......)   
删数据:   
    delete   from table1 a where rowid !=(select   max(rowid)   
     from table1 b where a.name1=b.name1 and a.name2=b.name2......)   
2.group by方法   
查数据:   
  select count(num), max(name) from student --列出重复的记录数,并列出他的name属性   
  group by num   
  having count(num) >1 --按num分组后找出表中num列重复,即出现次数大于一次   
删数据:   
  delete from student   
  group by num   
  having count(num) >1   
  这样的话就把所有重复的都删除了。   
3.用distinct方法 -对于小的表比较有用   
create table table_new as   select distinct *   from table1 minux   
truncate table table1;   
insert into table1 select * from table_new;   
查询及删除重复记录的方法大全   
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)   
(二)   
比方说   
在A表中存在一个字段“name”,   
而且不同记录之间的“name”值有可能会相同,   
现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;   
Select Name,Count(*) From A Group By Name Having Count(*) > 1   
如果还查性别也相同大则如下:   
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 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   
  就可以得到无重复记录的结果集。   
  如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除   
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,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)   
(四)   
查询重复   
select * from tablename where id in (   
select id from tablename   
group by id   
having count(id) > 1
分享到:
评论

相关推荐

    删除数据表中重复记录

    2. **标记重复记录**:可以创建一个临时表或使用子查询来标记出需要删除的重复记录。 3. **执行删除操作**:基于标记好的记录执行删除操作。 #### 示例代码解析 以下是一段示例SQL脚本,用于演示如何删除表`a`中的...

    Oracle数据库删除表中重复记录的方法三则.txt

    FROM tb_channel b WHERE a.policyNo = b.policyNo AND a.classCode = b.classCode)`:通过子查询找出所有具有相同`policyNo`和`classCode`的记录中ROWID最大的那些记录,并删除它们。 **注意:** - 此方法仅...

    在oracle查询删除一个表编码中相同的记录

    本文将详细探讨如何在Oracle中查询并删除一个表中编码相同的记录。 ### 一、问题背景 假设有一个名为 `T_PB_DTM_FINANCE_COST` 的表,其中包含多个字段,而我们关注的是 `STEEL_GRADE_ID` 字段。在这个场景下,...

    Oracle删除表中的重复数据

    通过`ROWNUM`函数和子查询的方式,进一步保证了即使有多条记录在上述列上完全相同,也只会有一条被插入到临时表中。 3. **删除原表并重命名临时表**:最后,通过`DROP TABLE tlinkman;`和`ALTER TABLE tlinkman2 ...

    查询和删除表中重复数据

    此查询用于找出 `student` 表中具有相同 `num` 值并且出现次数多于一次的记录,并返回这些记录的计数以及每组的最大 `name` 值。 #### 3. 使用 `DISTINCT` **示例**: ```sql CREATE TABLE table_new AS SELECT ...

    查询和删除表中重复数据sql语句

    标题和描述概述的知识点主要集中在SQL语言中处理表内重复数据的方法上,涵盖了查询与删除重复数据的不同场景。下面将详细解析这些知识点: ### 查询表中重复数据 #### 单字段重复数据查询 ```sql SELECT * FROM ...

    删除数据库中的重复记录

    2. Access的删除操作:在Access中,可以创建一个“追加查询”来将非重复记录追加到一个新的临时表,然后删除原始表,最后将临时表重命名为原始表名。这种方法比较安全,因为可以先备份数据。 三、预防重复记录 1. ...

    SQL语句删除数据表中重复的记录

    在SQL中,可以使用特定的查询语句来删除重复的记录,以保持数据的整洁和准确。以下是如何使用SQL语句来删除数据表中重复记录的详细步骤。 首先,我们来看一个简单的例子,假设我们有一个名为`Repeat`的数据表,其中...

    删除表中重复数据sql语句

    下面将详细介绍如何使用SQL语句来查询和删除表中的重复数据。 ### (一)基本概念及实现方法 1. **查询表中重复数据** - **单字段重复数据查询** ```sql SELECT * FROM people WHERE peopleId IN ( SELECT ...

    如何删除表中重复数据

    以上介绍了三种删除表中重复数据的方法:使用临时表、使用子查询以及使用`ROW_NUMBER()`函数。不同的数据库系统可能支持的功能不同,因此在实际操作时需要根据所使用的数据库类型选择合适的方法。同时,在执行任何...

    plsql删除重复记录

    2. **外部查询**:删除除了每个分组中ROWID最小的记录之外的所有记录。 这种方法的好处是: - 非常高效,因为它只保留每个分组中的一个记录。 - 可以确保即使在大量数据的情况下也能快速执行。 #### 注意事项 - ...

    删除Access数据库中重复的记录

    在Access中一般只能查找10行大概20条重复记录,这样程序就可以任意指定表及多字段检索重复记录,并把重复的记录移除到一个临时表中,并不是进行真正删除,你可以进行恢复。但是执行第二次查找时则自动删除上次查找的...

    sql 删除表中的重复记录

    这里,内部查询`a`再次找到重复记录中ID最小的那些,而外部的`DELETE`语句则根据这些ID删除其他所有重复的记录。注意,这里使用了`INNER JOIN`来匹配表`T_Dor_StructStar`中的记录与ID最小的记录,然后筛选出那些ID...

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

    本文将详细介绍如何使用SQL语句查询并删除同一表内一个或多个字段的重复记录。 首先,查询重复记录的基本思路是通过比较表中的每一条记录与其他记录的对应字段是否相同。例如,在人员表`peosons`中,如果想要找出...

    批量删除MySQL数据库相同前缀的数据表 v1.0

    【批量删除MySQL数据库相同前缀的数据表 v1.0】是一个针对MySQL数据库设计的实用工具,主要用于高效地删除具有特定前缀的多个数据表。在数据库管理中,尤其是在开发和测试环境中,有时需要快速清理与特定项目或功能...

    sql查询表中某字段下所有重复的记录

    sql查询表中某字段下所有重复的记录,删除某字段下重复记录最小的那笔记录

    SQL重复记录查询与删除

    在数据库管理中,有时我们需要处理数据表中重复的记录,这通常涉及到查询和删除操作。以下将详细解释如何使用SQL来查找和删除重复记录。 1. 单字段重复记录查询: 当我们只需要考虑单个字段(如`peopleId`)的重复...

    Delphi自动删除数据库中重复记录..rar

    2. **创建数据集**:使用 TADOQuery 或 TADODataset 组件,设置 SQL 查询语句来获取需要检查的表或视图的数据。查询可能包括 WHERE 子句,以便限制需要处理的记录范围。 3. **定义主键**:为了识别重复记录,通常...

    通过存储过程删除Mysql数据库表中的重复记录.pdf

    - `v_duplicate_min_order`:重复记录中最小的`order`值。 - `v_duplicate_last_id`:上次处理的记录ID。 - `v_do`:标记游标是否到达了最后一个值。 - `v_id`, `v_title`, `v_order`:从游标中获取的当前记录的...

    解决Oracle删除重复数据只留一条的方法详解

    查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1)2、删除表中多余的重复记录,...

Global site tag (gtag.js) - Google Analytics