本篇内容主要讲解“如何实现关联子查询Update语句更新数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何实现关联子查询Update语句更新数据”吧!

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.创建测试表createTABLETable1(avarchar(10),bvarchar(10),cvarchar(10),CONSTRAINT[PK_Table1]PRIMARYKEYCLUSTERED(aASC))ON[PRIMARY]createTABLETable2(avarchar(10),cvarchar(10),CONSTRAINT[PK_Table2]PRIMARYKEYCLUSTERED(aASC))ON[PRIMARY]GO--2.创建测试数据InsertintoTable1values('赵','asds',null)InsertintoTable1values('钱','asds','100')InsertintoTable1values('孙','asds','80')InsertintoTable1values('李','asds',null)InsertintoTable2values('赵','90')InsertintoTable2values('钱','100')InsertintoTable2values('孙','80')InsertintoTable2values('李','95')GOselect*fromTable1--3.通过游标方式更新declare@namevarchar(10)declare@scorevarchar(10)declaremycursorcursorforselectafromTable1wherecisnullopenmycursorfetchnextfrommycursorinto@namewhile(@@fetch_status=0)BEGINselect@score=cfromTable2wherea=@nameupdateTable1setc=@scorewherea=@namefetchnextfrommycursorinto@nameENDclosemycursordeallocatemycursorGO--4.显示更新后的结果select*fromTable1GO--5.删除测试表dropTABLETable1dropTABLETable2

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

--1.创建测试表createTABLETable1(avarchar(10),bvarchar(10),cvarchar(10),CONSTRAINT[PK_Table1]PRIMARYKEYCLUSTERED(aASC))ON[PRIMARY]createTABLETable2(avarchar(10),cvarchar(10),CONSTRAINT[PK_Table2]PRIMARYKEYCLUSTERED(aASC))ON[PRIMARY]GO--2.创建测试数据InsertintoTable1values('赵','asds',null)InsertintoTable1values('钱','asds','100')InsertintoTable1values('孙','asds','80')InsertintoTable1values('李','asds',null)InsertintoTable2values('赵','90')InsertintoTable2values('钱','100')InsertintoTable2values('孙','80')InsertintoTable2values('李','95')GOselect*fromTable1--3.通过Update方式更新UpdateTable1setc=(selectcfromTable2wherea=Table1.a)wherecisnullGO--4.显示更新后的结果select*fromTable1GO--5.删除测试表dropTABLETable1dropTABLETable2

到此,相信大家对“如何实现关联子查询Update语句更新数据”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!