`
高级java工程师
  • 浏览: 409047 次
  • 性别: 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 
分享到:
评论
1 楼 ccitking123 2012-03-17  
谢谢您!! [color=red][/color][size=large][/size]

相关推荐

    MySQL根据某一个或者多个字段查找重复数据的sql语句

    sql 查出一张表中重复的所有记录数据 1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2、...

    Oracle中用一张表的字段更新另一张表的字段

    在Oracle数据库中,当需要将一个表的字段值更新到另一个表时,通常可以使用`MERGE INTO`语句来实现。`MERGE INTO`是一个非常强大的SQL操作,它结合了`INSERT`、`UPDATE`和`DELETE`的功能,允许你在匹配条件的基础上...

    mysql 数据表中查找重复记录

    首先,给出的SQL语句是用于查找`user_table`表中`user_name`字段上的重复记录。以下是完整的SQL查询: ```sql SELECT user_name, COUNT(*) AS count FROM user_table GROUP BY user_name HAVING count > 1; ``` 这...

    MySQL大表中重复字段的高效率查询方法

    数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较。如果仅仅是查找数据库中name不重复的字段,很容易 代码如下:SELECT min(`id`),`name` FROM `table` GROUP BY `name`; 但是这样并不能得到说有重复...

    Sql Server中一个表2个字段关联同一个表(代码解决)

    在SQL Server数据库设计中,有时候会遇到一个表的两个字段需要关联到同一个表的情况,这通常发生在需要通过多个关联字段获取同一张表的不同信息时。本文将深入探讨如何解决这个问题,以及提供相应的代码示例。 首先...

    Sql Server里删除数据表中重复记录的例子

    数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除! [分析] 1、生成一张临时表new_users,表结构与users表一样; 2、对users表按id做一个循环,每从users表中读出一个...

    Mysql数据库+多表之间的数据同步SQL语句+多字段排序语句

    在处理数据时,可能会遇到表中有重复记录的情况,这时需要进行去重处理。 ```sql SELECT a.* FROM taxation_data a JOIN ( SELECT social_credit_code, MAX(base_id) AS best_history_data FROM taxation_data ...

    《如何将EXCEL中多个个BOM汇总到一个表中》附件“合并多个BOM表”

    在Excel中,BOM(Bill of Materials)通常指的是物料清单,是制造业中用于记录产品构成的层次结构表。本主题将深入探讨如何高效地合并多个BOM表到一个单一的Excel工作表中,以实现数据整合和管理。下面将详细阐述这...

    MySQL下将一个表的数据插入到另外一个表的实现语句

    这行语句会将`articles`表中的所有记录插入到`newArticles`表中,如果目标表中已有相同的数据,那么默认情况下,MySQL将会抛出错误,不允许重复键值的插入。 然而,如果只需要迁移特定字段,我们可以指定字段列表来...

    ext两张表组成的tree结构防止id重复的方法(一)

    通常,树结构可以通过自引用的方式实现,即一张表中有一个字段指向自身的ID,形成父节点与子节点的关系。在本例中,我们可能有两张表,一张用于存储父节点信息,另一张用于存储子节点信息。为避免ID重复,我们需要...

    MySQL 表字段属性.docx

    主键是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录。一个表不能有多个主关键字,并且主关键字的列不能包含空值和重复值。主关键字是可选的,可以在 CREATE TABLE 或 ALTER TABLE 语句中定义。 ...

    VFP索引与排序PPT学习教案.pptx

    * 索引的关键字段值或索引表达式值与记录号(物理顺序)对应的内容又称之为一张“对照表”,用一个索引标识来标记。 索引的类型: * 主索引(Primary Indexes):每张表只能有一个主索引, 一般为表的关键字或索引...

    SQL的主键和外键的作用.doc

    在一张表中,主键是用来定义每条记录的唯一标识,这意味着主键的值在该表中必须是唯一的,并且不能为NULL。例如,在学生表中,学号可以作为主键,因为每个学生都有唯一的学号。主键的约束确保了任何试图插入重复学号...

    保持两表数据一致的触发器事例.pdf

    触发器在插入新记录时,会检查对应表中是否存在相同的记录,如果不存在,则将新记录插入到另一张表中,同时避免了重复插入和无限递归的问题。UPDATE触发器则在T1表的value字段被更新时,检查T2表中是否有相应的记录...

    数据库设计规范化的五个要求样本.doc

    数据库设计规范化的五个要求样本分别是:表中应当避免可为空列、表不应当有重复值或者列、表中记录应当有一种唯一标记符、数据库对象要有统一前缀名和最后一个未体现的规定。这些规定都是数据库设计规范化的重要组成...

    JSOUP 一张表存储省市区街道四级地址信息,主键用UUID存储, 还有一种是用四张表分别存取 省 市 区 街道四级 可以作为参

    单表存储简化了查询和维护,但可能会导致数据冗余,因为同级的省或市信息可能会在多个记录中出现。 2. **四张表存储**: 这种方法将四级地址信息拆分为四个独立的表:省份、城市、区域和街道。每个表都有自己的...

    逆向工程Example方法使用说明

    - **`example.setDistinct(true)`**:设置是否去除重复记录。 - **`criteria.andXxxIsNull`**:设置字段为空的条件。 - **`criteria.andXxxIsNotNull`**:设置字段不为空的条件。 - **`criteria.andXxxEqualTo(value...

    SQL语言中GROUP BY子句的应用剖析.pdf

    先按XH字段排序,表SCORE中的XH字段值相同的记录排到一起,假设使用一张临时表TEMP保存排序后的表记录。 (2)分组、统计过程。对临时表TEMP的记录按块分组,XH字段值相同的记录分在一组,共分为三组。 (3)分类...

Global site tag (gtag.js) - Google Analytics