表a
用户名字 手机 地址
小明1 地址1
小明 2 地址2
-------------------------------------------
表b
用户名字 手机
小明1 135555555
小明2 138000000
表a和表b的用户名字是相关联的,表a的手机号为空,现在要把b中的手机号对应更新到a表中.
sql: update 表a set 手机=b.手机 from 表a as a inner join 表b as b on a.用户名字=b.用户名字,
实际是上可行的,就是不知道原理,update 表a set 手机=b.手机是如何对应上的,如果这样写,可以很好理解
update 表a as a inner join 表b as b on a.用户名字=b.用户名字 set set a.手机=b.手机,
但是在sql2008上不通过!
这是MSSQL特有的UPDATE...SET...FROM...WHERE...的语法,实际上就是从源表获取更新数据。
“ update 表a as a inner join 表b as b on a.用户名字=b.用户名字 set set a.手机=b.手机”不符合sql2008的语法,当然无法执行。
只有以下类似方式:
UPDATE b SET b.memo = a.name FROM b LEFT JOIN a ON a.id = b.id
如果需要更新多个字段的话使用:
UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A LEFT JOIN B ON A.ID = B.ID
或者:
UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A, B WHERE A.ID = B.ID
UPDATE 表a SET 表a.手机 = 表b.手机 FROM 表a INNER JOIN 表b ON 表b.用户名字 = 表a.用户名字
标准的写法