为了账号安全,请及时绑定邮箱和手机立即绑定

sqlserver删除数据冗余,高手请解释下!thank you

sqlserver删除数据冗余,高手请解释下!thank you

繁花如伊 2018-11-20 10:26:50
数据表:CREATE TABLE tb_Table(ID int IDENTITY(1,1) NOT NULL,GeoNO varchar(50) NOT NULL,Title varchar(100) NULL,ConID varchar(50) NULL)Insert into tb_Table (GeoNo,Title,ConID) values ('01','北京','1000')Insert into tb_Table (GeoNo,Title,ConID) values ('0101','海淀区','1000')Insert into tb_Table (GeoNo,Title,ConID) values ('010101','上地','1000')Insert into tb_Table (GeoNo,Title,ConID) values ('01','北京','1001')Insert into tb_Table (GeoNo,Title,ConID) values ('0102','朝阳区','1001')Insert into tb_Table (GeoNo,Title,ConID) values ('010201','北辰','1001')我想把上述数据入库后,再从表里删除数据,保留的数据是:'010101','上地','1000''010201','北辰','1001''010301','回龙观','1002'其他的数据则删除,即保证ConID是唯一的,而且GeoNo的值是最大。如何用SQL来实现?上面是别人提问的,有个人的回答是这样的delete t from  tb_Table t whereexists( select1from  tb_Table where ConID=t.ConID andlen(GeoNo)>len(t.GeoNo))我看了,但是我不明白,这句sql怎么会执行出那样的结果的,各位谁指导下这句sql的执行思路?谢谢!
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

把条件稍微改一下 你应该就理解了

delete t from  tb_Table twhere exists ( select 1 from  tb_Table t2 where t2.ConID = t.ConID and len(t2.GeoNo) > len(t.GeoNo))

就是说  对于t中每条数据, 只要 t2 中 有任意一条数据 与 t当前数据 有相同的 ConID 并且 GeoNo 比 t当前的这条数据的 GeoNo  更长, 那么就将t 中这条数据删除 。

比如 t 中第一条数据 ('01','北京','1000' )  在t2 中有相同的 ConID 的有 ('01','北京','1000') , ('0101','海淀区','1000'),  ('010101','上地','1000')  有两条以上的数据都比 t的长,  于是 t中的第一条数据会被删除。


查看完整回答
反对 回复 2018-11-24
?
慕沐林林

TA贡献2016条经验 获得超9个赞

思路?大哥你几年级的

 

看条件where ConID=t.ConID andlen(GeoNo)>len(t.GeoNo)

Insert into tb_Table (GeoNo,Title,ConID) values ('01','北京','1000')
Insert into tb_Table (GeoNo,Title,ConID) values ('0101','海淀区','1000')
Insert into tb_Table (GeoNo,Title,ConID) values ('010101','上地','1000')

弄成

Insert into tb_Table (GeoNo,Title,ConID) values ('010101','上地','1000')

这3条的ConID相同,留下GeoNo长度最大的


查看完整回答
反对 回复 2018-11-24
  • 2 回答
  • 0 关注
  • 562 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信