如何删除表中的重复记录?

来源:互联网 发布:剑灵灵女萌妹子数据 编辑:程序博客网 时间:2024/06/07 16:30
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

--测试数据
/*-----------------------------
select*fromtt
-----------------------------*/
id         pid        
----------------------
1          1
1          1
2          2
3          3
3          3
3          3

(所影响的行数为6行)

首先,如何查询table中有重复记录
select*,count(1)asrownum
fromtt
groupbyid,pid
havingcount(1)>1
id         pid        rownum     
---------------------------------
1          1          2
3          3          3

(所影响的行数为2行)

方法一:使用distinct和临时表
ifobject_id('tempdb..#tmp')isnotnull
droptable#tmp
selectdistinct*into#tmpfromtt
truncatetablett
insertintottselect*from#tmp

方法二:添加标识列
altertablettaddNewIDintidentity(1,1)
go 
deletefromtt whereexists(select1fromttawhere a.newid>tt.newidandtt.id=a.idandtt.pid=a.pid)
go
altertablettdropcolumnNewID
go

--测试结果
/*-----------------------------
select*fromtt
-----------------------------*/
id         pid        
----------------------
1          1
2          2
3          3

(所影响的行数为3行)

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>