香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > 数据库 >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

利用带关联子查询Update语句更新数据的方法


时间:2020-11-19 14:19 作者:admin610456


Update是T-sql中再简单不过的语句了,update table set column=expression [where condition],我们都会用到。但update的用法不仅于此,真正在开发的时候,灵活恰当地使用update可以达到事半功倍的效果。

假定有表Table1(a,b,c)和Table2(a,c),现在Table1中有些记录字段c为null,要根据字段a在Table2中查找,取出字段a相等的字段c的值来更新Table1。一种常规的思路,通过游标遍历Table1中字段c为null的所有记录,在循环体内查找Table2并进行更新,即用游标Cursor的形式。测试sql语句如下:

--1.创建测试表  create TABLE Table1  (    a varchar(10),    b varchar(10),    c varchar(10),    CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED    (      a ASC    )  ) ON [PRIMARY]  create TABLE Table2  (    a varchar(10),    c varchar(10),    CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED    (      a ASC    )  ) ON [PRIMARY]  GO  --2.创建测试数据  Insert into Table1 values('赵','asds',null)  Insert into Table1 values('钱','asds','100')  Insert into Table1 values('孙','asds','80')  Insert into Table1 values('李','asds',null)  Insert into Table2 values('赵','90')  Insert into Table2 values('钱','100')  Insert into Table2 values('孙','80')  Insert into Table2 values('李','95')  GO  select * from Table1  --3.通过游标方式更新  declare @name varchar(10)  declare @score varchar(10)  declare mycursor cursor for select a from Table1 where c is null  open mycursor  fetch next from mycursor into @name  while(@@fetch_status = 0)  BEGIN    select @score=c from Table2 where a=@name    update Table1 set c = @score where a = @name    fetch next from mycursor into @name    END  close mycursor  deallocate mycursor  GO  --4.显示更新后的结果  select * from Table1  GO  --5.删除测试表  drop TABLE Table1  drop TABLE Table2

虽然用游标可以实现,但代码看起来很复杂,其实用Update根据子关联来更新只要一条语句就可以搞定了,测试代码如下:

--1.创建测试表  create TABLE Table1  (    a varchar(10),    b varchar(10),    c varchar(10),    CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED    (      a ASC    )  ) ON [PRIMARY]  create TABLE Table2  (    a varchar(10),    c varchar(10),    CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED    (      a ASC    )  ) ON [PRIMARY]  GO  --2.创建测试数据  Insert into Table1 values('赵','asds',null)  Insert into Table1 values('钱','asds','100')  Insert into Table1 values('孙','asds','80')  Insert into Table1 values('李','asds',null)  Insert into Table2 values('赵','90')  Insert into Table2 values('钱','100')  Insert into Table2 values('孙','80')  Insert into Table2 values('李','95')  GO  select * from Table1  --3.通过Update方式更新  Update Table1 set c = (select c from Table2 where a = Table1.a) where c is null  GO  --4.显示更新后的结果  select * from Table1  GO  --5.删除测试表  drop TABLE Table1  drop TABLE Table2

参考资料:也许是被忽略的update语句,update 子查询

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)