sql查询一列重复数据,查询表某个字段重复

  sql查询一列重复数据,查询表某个字段重复

  方法1:

  1.在表中查找冗余的重复记录。根据单个字段(peopleId)判断重复记录

  从人员中选择*

  其中peopleId in(按peopleId计数(peopleId) 1从人员组中选择peopleId)

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

  从联系人中删除

  其中peopleId in(按peopleId计数(peopleId) 1从人员组中选择peopleId)

  和rowid不在(按计数(peopleId)为1的peopleId从人员组中选择min(rowid))

  3.在表中查找冗余的重复记录(多个字段)。

  select * from vitae a

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

  4.删除表中冗余的重复记录(多个字段),只留下rowid最小的记录。

  从简历中删除a

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

  和rowid不在(select min(rowid)from vitae group by people id,seq having count(*) 1)

  5.在表中查找冗余的重复记录(多个字段),排除rowid最小的记录。

  select * from vitae a

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

  和rowid不在(select min(rowid)from vitae group by people id,seq having count(*) 1)

  方法二:

  现在假设数据库表名为student,其中有字段Sno(学号)和ID(身份证)。您需要查找具有重复Sno字段的记录,并且ID字段是唯一的。这里提供了两种查询方法:

  1.通过学号和ID字段查询(数据库效率高,推荐)。

  选择*

  从学生作为

  其中(Sno IN(选择Sno FROM

  学生为B,其中A.ID B.ID))

  2.只通过学号字段查询(数据库执行效率低,不推荐)

  选择*

  从学生作为

  其中(SELECT COUNT(*) FROM

  学生,其中Sno=A.Sno) 1

  从运行结果来看,1和2是一样的,但是执行效率完全不同。第一种方法执行一万多条数据只需要几秒钟,第二种方法需要几分钟,而且有死机现象。

  方法三:

  重复记录有两种,一种是完全重复记录,即所有字段都重复,另一种是一些关键字段,比如姓名字段,而其他字段不一定重复或者可以忽略。

  1.对于第一种重复,它更容易解决和使用

  挑选

  不同于

  表结构

  您可以获得没有重复记录的结果集。

  如果该表需要删除重复记录(保留一条重复记录),可以按如下方式删除

  挑选

  distinct * into #Tmp from tableName

  删除表tableName

  选择*

  从#Tmp到tableName

  翻桌

  #Tmp

  这种重复是由糟糕的表设计造成的,可以通过添加唯一的索引列来解决。

  2.这种重复问题通常要求保留重复记录中的第一条记录。操作方法如下

  假设重复字段是name Name,Address,则需要得到这两个字段的唯一结果集。

  挑选

  identity(int,1,1)作为autoID,*从tableName到#Tmp

  挑选

  min(autoID)作为autoID从#Tmp group by Name,autoID

  选择*

  from #Tmp其中autoID in(选择autoID from

  #tmp2)

  最后一个select导致结果集中没有重复的名称和地址(但是添加了一个autoID字段,在编写时可以在select子句中省略它)

  补充:

  有两条以上的重复记录,一条是完全重复记录,即所有字段都重复,另一条是某些关键字段的重复记录,比如姓名字段,而其他字段不一定重复或者可以忽略。

  1.对于第一种重复,它更容易解决和使用

  select distinct * from tableName

  您可以获得没有重复记录的结果集。

  如果该表需要删除重复记录(保留一条重复记录),可以按如下方式删除

  select distinct * into # Tmp from tableName

  删除表tableName

  select * into tableName from #Tmp

  删除表#Tmp

  这种重复是由糟糕的表设计造成的,可以通过添加唯一的索引列来解决。

  2.这种重复问题通常要求保留重复记录中的第一条记录。操作方法如下

  假设重复字段是name Name,Address,则需要得到这两个字段的唯一结果集。

  select identity(int,1,1) as autoID,* into #Tmp from tableName

  从#Tmp group by Name,autoID中选择min(autoID)作为#Tmp2中的autoID

  select * from # Tmp where autoID in(select autoID from # Tmp 2)

  最后一个select导致结果集中没有重复的名称和地址(但是添加了一个autoID字段,在编写时可以在select子句中省略它)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: