好难的delete!!大家帮忙啊!

liangx326 2004-09-29 05:25:37
表名:tb1
结构如下:
aa bb
1 2
1 3
2 4
2 5
我现在想做删除操作,删除以后aa列没有重复,其他的列没有要求。
应该怎样做啊??
帮忙啊!
...全文
245 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangx326 2004-09-30
  • 打赏
  • 举报
回复
楼上的这样做可以吗??每一行的纪录又不是完全一样,直接用select distinct * 应该不可以吧?
General521 2004-09-29
  • 打赏
  • 举报
回复
select distinct *  ----将原表中的数据导入到临时表中
into #t
from tb1

truncate table tb1 ----此删除不记录日志,可以节省你的日志空间.

insert into tb1
select * from #t  ----将临时表中的数据导入到原表中
lxiaoa 2004-09-29
  • 打赏
  • 举报
回复
up
liangx326 2004-09-29
  • 打赏
  • 举报
回复
我不明白,晚上再好好想想,明天结贴!
谢谢各位!
yjdn 2004-09-29
  • 打赏
  • 举报
回复
不管bb有没有重复的:用临时表的办法:
select distinct aa,max(bb)bb into #tt into tb1 from tb1 group by aa
truncate table tb1
insert into tb1 select * from #tt
liangx326 2004-09-29
  • 打赏
  • 举报
回复
什么意思啊??不是很明白。
能帮我写一下么?
学习一下,谢谢!
liangx326 2004-09-29
  • 打赏
  • 举报
回复
楼上的这样不行吧?
因为我不光有aa和bb两个字段,还有别的字段的,这是第一点
第二,要是aa列有不重复值的怎么办?是不是没有影响啊?
第三,这样是不是有危险?我如果要是修改服务器上的数据库,万一drop操作以后死机了,重起以后是不是还有数据阿??
fivefive 2004-09-29
  • 打赏
  • 举报
回复
是不是其他字段的数据是什么都无所谓阿
如果是这样的话可以:
把原表数据放入临时表中,然后把数据删除
接下来:
select aa,'你想要得字符串'bb
from 临时表
group by aa
把上面的数据插到原表中就可以了。
yjdn 2004-09-29
  • 打赏
  • 举报
回复
select distinct aa,max(bb)bb into tb2 from tb1 group by aa
drop table tb1
exec sp_rename 'tb2','tb1'

------------------
如果你不想用改名的办法,那就用临时表
liangx326 2004-09-29
  • 打赏
  • 举报
回复
aa列中如果有重复的,只留一行,其余的删除,留哪一行没有限制
如果不重复的就保留
表中不光有aa,bb两个字段,还有别的,不过和删除没有关系。
要求就是这样!
再帮忙想想
谢谢!
liangx326 2004-09-29
  • 打赏
  • 举报
回复
我要把aa列中重复的记录删除,没有重复的不变
谢谢
liangx326 2004-09-29
  • 打赏
  • 举报
回复
不行,要是别的行里面bb对应的有重复的怎么办啊??
比如:
第5行是:
aa bb
3 5
那删除的时候不是也要删除这一个了么??
yjdn 2004-09-29
  • 打赏
  • 举报
回复
bb字段保留大的用:
delete tb1 where bb not in (select max(bb) from tb1 group by aa having count(aa)>1)
保留最小的用:
delete tb1 where bb not in (select min(bb) from tb1 group by aa having count(aa)>1)
solidpanther 2004-09-29
  • 打赏
  • 举报
回复
delete from tb1
where exists (select aa,min(bb) bb from tb1 t2
where t2.aa=tb1.aa and t2.bb<>tb1.bb)
solidpanther 2004-09-29
  • 打赏
  • 举报
回复
delete from tb1 t1 where exists (select aa,min(bb) bb from tb1 where aa=t1.aa and tb1.bb<>t1.bb)
meilian01 2004-09-29
  • 打赏
  • 举报
回复
没重复的他也会到临时表里呀!
meilian01 2004-09-29
  • 打赏
  • 举报
回复
-- 还是用这个吧!

select aa,max(bb) into tmpTable from tb1 group by aa

delete tb1

insert into tb1 from tmpTable
liangx326 2004-09-29
  • 打赏
  • 举报
回复
删除的时候随便删一条就好了
liangx326 2004-09-29
  • 打赏
  • 举报
回复
不行,我的表里面不光有aa重复的,也有不重复的,不能先删除再插入阿!
meilian01 2004-09-29
  • 打赏
  • 举报
回复
-- 更正 :D

select distinct aa into tmpTable from tb1

select a.aa,b.bb into tmpTablea from tmpTable a left join tb1 b on a.aa = b.aa

delete tb1

insert into tb1 from tmpTablea

加载更多回复(8)

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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