日期:2014-05-17  浏览次数:20523 次

求:SQL数据库删除重复数据的语句
表中有3个字段,分别为:   id    pwd    home

比如:
id    pwd   home
111   222   333
111   222   333
111   222   333

这样的数据就是重复的

求一个语句,把这样的数据留一个, 剩下的全删

------解决方案--------------------
参考http://bbs.csdn.net/topics/240034273
------解决方案--------------------

with tb(a,id,pwd,home) as
(
select row_number() over(partition by id,pwd,home order by id)a,* from 表名
)
delete tb where a>2

------解决方案--------------------
单纯从数据来说:直接select distinct * from 表 不就可以咯?
------解决方案--------------------
然后把这些数据先存到一个临时表,然后turncate源表,再把数据插回去。方法有多种,
------解决方案--------------------
1 :首先查找出重复的数据并且过滤掉 ,然后复制到一张临时表里面
select * into temp from (select distinct* from tab) as a
2:删除之前的原始表 
drop table tab
3:把临时表里面的数据再复制到原始表里(注:这里的原始表意义上是和之前的那个表的表名一样)
select * into tab from temp
------解决方案--------------------
引用:
不会呀,各位大侠,只求一条语句啊
太多了,看不懂


我给你写了个啊...

引用:
参考http://bbs.csdn.net/topics/240034273


这个就没问题..
------解决方案--------------------
错了,是2楼的
------解决方案--------------------
步骤1:select distinct * into #t from tb
步骤2:truncate table tb
步骤3:insert into tb select * from #t
步骤4:drop table #t
------解决方案--------------------
引用:
SQL code?12345with tb(a,id,pwd,home) as(select row_number() over(partition by id,pwd,home order by id)a,* from 表名)delete tb where a>2

这个就可以啊
------解决方案--------------------
引用:
SQL code?12345with tb(a,id,pwd,home) as(select row_number() over(partition by id,pwd,home order by id)a,* from 表名)delete tb where a>2
+1
------解决方案--------------------
引用:
(a,id,pwd,home)
这里的a是干嘛的啊

a起到序列的作用,以後面的刪除作準備
------解决方案--------------------
忘删除源表数据了