如何实现关联子查询Update语句更新数据

本篇内容主要讲解“如何实现关联子查询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.创建测试表
  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语句更新数据
文章位置:http://hbruida.cn/article/jchgos.html