sql语句?

kittenlpf 2006-12-26 02:26:29
id newid
1 1
2 2
2 2
3 3
3 3
3 3
1 1
2 2
3 3

如上表,去掉重复数据,不能用临时表,用SQL语句如何实现?
...全文
417 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
WNASP 2006-12-27
  • 打赏
  • 举报
回复
新建一个一模一样的表,不过要加唯一约束
然后把这个表的数据到过去,遇到重复的,他会自动跳过
wangdehao 2006-12-27
  • 打赏
  • 举报
回复
要求有点无理

根本无法分别出你到底要删除的是哪一条记录..
guoweihrh 2006-12-27
  • 打赏
  • 举报
回复
select * from 表名 group by id,newid
rainxiang 2006-12-27
  • 打赏
  • 举报
回复
不清楚你得表数据情况是怎么样得.
能否采用这样得方法,比如你可以先获取到你得id和newid得最大值
然后设置一个变量大于你前面取到得最大值
再用select distinct id+你设置得变量,newid+你设置得变量 from table
插入到你得table表
接着delete table表中小于你设置得变量得值
最后update table中得id跟newid得值,让他们减去你前面设得变量值....

可能说得比较模糊..
看下下面得...


create table #tb(id int,newid int)
insert into #tb(id,newid) values(1,1)
insert into #tb(id,newid) values(2,2)
insert into #tb(id,newid) values(2,2)
insert into #tb(id,newid) values(1,1)
insert into #tb(id,newid) values(2,2)
insert into #tb(id,newid) values(3,3)
insert into #tb(id,newid) values(3,3)
insert into #tb(id,newid) values(2,2)
insert into #tb(id,newid) values(2,2)


insert into #tb(id,newid)
select distinct id+1000,newid+1000 from #tb

delete from #tb where id<1000 and newid<1000

update #tb set id = id-1000,newid=newid-1000

select * from #tb

drop table #tb

///这里得1000就是我设置得最大值了...
www_datasky_cn 2006-12-27
  • 打赏
  • 举报
回复
"你这个选择是没有意义的,后面newid不一样的话,你道底要显示哪一个33?????哪一个22????,哪一个11??????,所以sql里也不存在你这样不合理个要求,你要不重复的话只有这样,select distinct (id) from dd,"
支持!!!
xujianxiang 2006-12-27
  • 打赏
  • 举报
回复
你这个选择是没有意义的,后面newid不一样的话,你道底要显示哪一个33?????哪一个22????,哪一个11??????,所以sql里也不存在你这样不合理个要求,你要不重复的话只有这样,select distinct (id) from dd,
fayfm 2006-12-27
  • 打赏
  • 举报
回复
up ls
fcuandy 2006-12-26
  • 打赏
  • 举报
回复
方法大体有:
1.游标。
上面有朋友写过了,我写的话也是差不多的,只是细节上略有差别,就不写了。
2.临时表或表变量
declare @t table(id int,newid int)
insert @t select distinct id,newid from tb
truncate table tb
insert tb select id,newid from @t
3,加标识列
create table tb(id int,newid int)
insert into tb(id,newid) values(1,1)
insert into tb(id,newid) values(2,2)
insert into tb(id,newid) values(2,2)
insert into tb(id,newid) values(1,1)
insert into tb(id,newid) values(2,2)
insert into tb(id,newid) values(3,3)
insert into tb(id,newid) values(3,3)
insert into tb(id,newid) values(2,2)
insert into tb(id,newid) values(2,2)

alter table tb add idx int identity(1,1)
go
delete a from tb a where exists(select 1 from tb where idx<a.idx and checksum(a.id,a.newid)=checksum(id,newid))
go
alter table tb drop column idx
select * from tb
go
drop table tb
go
hb_gx 2006-12-26
  • 打赏
  • 举报
回复
是考试吗?实际应用那有那么多限制?
hushixiu 2006-12-26
  • 打赏
  • 举报
回复
使用游标测试通过,仅供参考:

declare @counts int
declare @id int
declare record cursor for select id,count(*) from Testtable group by id having count(*) > 1
open record
fetch record into @id,@counts
while @@fetch_status=0
begin
select @counts = @counts -1
set rowcount @counts
delete from Testtable where id = @id
fetch record into @id,@counts
end
close record
deallocate record
set rowcount 0
select * from Testtable order by id
hushixiu 2006-12-26
  • 打赏
  • 举报
回复
使用游标测试通过,仅供参考:

declare @counts int
declare @id int
declare record cursor for select id,count(*) from Testtable group by id having count(*) > 1
open record
fetch record into @id,@counts
while @@fetch_status=0
begin
select @counts = @counts -1
set rowcount @counts
delete from Testtable where id = @id
fetch record into @id,@counts
end
close record
deallocate record
set rowcount 0
select * from Testtable order by id
cpp2017 2006-12-26
  • 打赏
  • 举报
回复
或许游标能解决。 ======== 游标效率太差,还不如用表变量. 希望有高人能提供更好的方法.
hushixiu 2006-12-26
  • 打赏
  • 举报
回复
或许游标能解决。
kittenlpf 2006-12-26
  • 打赏
  • 举报
回复
我觉得还应该有别的方法,再等等,如果没有我就马上结贴
cpp2017 2006-12-26
  • 打赏
  • 举报
回复
总结一下: 可能的方法. 1.上面我讲的.变成负数或其他特值,再换回来. 2.修改该表结构.增加一列再删除 3.临时表或表变量 4.除此以外别无他法.
kittenlpf 2006-12-26
  • 打赏
  • 举报
回复
对,是要删除重复数据,还不能用临时表,期待高手
copico 2006-12-26
  • 打赏
  • 举报
回复
哦,你要删掉重复数据啊

不用临时表还真难,期待高手
早起晚睡 2006-12-26
  • 打赏
  • 举报
回复
要删除重复的数据是这个意思吧
kittenlpf 2006-12-26
  • 打赏
  • 举报
回复
回copico(路北) ,你这样是取出了数据,但没有把表中重复的数据删除掉
sunjay117 2006-12-26
  • 打赏
  • 举报
回复
insert into xx select distinct * from dd
导到另外一个表
加载更多回复(8)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧