我想知道是否有更好的方法来编写此更新语句的脚本:
update table A
set item = (select itemA + ' - ' + itemB from table B where id = 1),
temp = (select itemA from table B where id = 1)
where sid = (select sItemId from table B where id = 1)
答案 0 :(得分:4)
使用JOINS
提高效率,Alias
使其更具可读性。
UPDATE A
SET A.item = B.itemA + ' - ' + B.itemB
,A.temp = B.itemA
FROM tableA A
INNER JOIN tableB B ON A.[sid] = B.sItemId
where B.id = 1
答案 1 :(得分:1)
SQL Server特定语法:
update a
set item = b.itemA + ' - ' + b.itemB,
temp = b.itemA
from tableA a
inner join tableB b on a.sid = b.sItemId
where b.id=1
或者您可以使用MERGE:
merge into tableA as a
using tableB as b
on a.sid = b.sItemId and b.Id = 1
when matched then update set item = b.itemA + ' - ' + b.itemB, temp = b.itemA
;
合并的优点是它是标准的SQL语法,如果尝试两次更新同一条记录,它将会失败(带有update
的{{1}}将默默地只执行其中一条更新)。 IIRC在更高版本中(具有相应的兼容级别)join
也将失败。此外update
更灵活。
答案 2 :(得分:0)
当然最好只使用一个连接而不是检索同一个表(tableB)3次
UPDATE tableA
SET tableA.item =tableB. itemA + ' - ' + tableB.itemB,
tableA.temp = tableB.itemA ,
...
FROM tableA, tableB
WHERE tableA.sid= tableB.sItemId And tableB.id =1