时间:2021-07-01 10:21:17 帮助过:23人阅读
方法二
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
1、对于第一种重复,比较容易解决,使用
- <span style="color: #0000ff;">select</span> <span style="color: #0000ff;">distinct</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">from</span> tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
- <span style="color: #0000ff;">select</span> <span style="color: #0000ff;">distinct</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">into</span> #Tmp <span style="color: #0000ff;">from</span><span style="color: #000000;"> tableName
- </span><span style="color: #0000ff;">drop</span> <span style="color: #0000ff;">table</span><span style="color: #000000;"> tableName
- </span><span style="color: #0000ff;">select</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">into</span> tableName <span style="color: #0000ff;">from</span><span style="color: #000000;"> #Tmp
- </span><span style="color: #0000ff;">drop</span> <span style="color: #0000ff;">table</span> #Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
- <span style="color: #0000ff;">select</span> <span style="color: #ff00ff;">identity</span>(<span style="color: #0000ff;">int</span>,<span style="color: #800000; font-weight: bold;">1</span>,<span style="color: #800000; font-weight: bold;">1</span>) <span style="color: #0000ff;">as</span> autoID, <span style="color: #808080;">*</span> <span style="color: #0000ff;">into</span> #Tmp <span style="color: #0000ff;">from</span><span style="color: #000000;"> tableName
- </span><span style="color: #0000ff;">select</span> <span style="color: #ff00ff;">min</span>(autoID) <span style="color: #0000ff;">as</span> autoID <span style="color: #0000ff;">into</span> #Tmp2 <span style="color: #0000ff;">from</span> #Tmp <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span><span style="color: #000000;"> Name,autoID
- </span><span style="color: #0000ff;">select</span> <span style="color: #808080;">*</span> <span style="color: #0000ff;">from</span> #Tmp <span style="color: #0000ff;">where</span> autoID <span style="color: #808080;">in</span>(<span style="color: #0000ff;">select</span> autoID <span style="color: #0000ff;">from</span> #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
前段时间写的如何删除sql数据库中重复记录是针对sql数据库的,最近发现有人需求access数据库删除重复记录的语句,发上来与大家分享。
- <span style="color: #0000ff;">delete</span> <span style="color: #0000ff;">from</span> 表名 <span style="color: #0000ff;">where</span> 重复字段名 <span style="color: #808080;">in</span> (<span style="color: #0000ff;">select</span> 重复字段名 <span style="color: #0000ff;">from</span> 表名 <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> 重复字段名 <span style="color: #0000ff;">having</span> <span style="color: #ff00ff;">count</span>(重复字段名) <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">1</span>) <span style="color: #808080;">and</span> id <span style="color: #808080;">not</span> <span style="color: #808080;">in</span> (<span style="color: #0000ff;">select</span> <span style="color: #ff00ff;">min</span>(id) <span style="color: #0000ff;">from</span> 表名 <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> 重复字段名 <span style="color: #0000ff;">having</span> <span style="color: #ff00ff;">count</span>(重复字段名 )<span style="color: #808080;">></span><span style="color: #800000; font-weight: bold;">1</span>)
表名和重复字段名你跟着修改成你的数据库名和字段名就可以了
SqlServer删除重复数据的方法
标签:sql tin etc delete pre 需要 保留 sql数据库 access