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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。