我可以使用更有效的查询吗?

时间:2016-08-28 22:15:26

标签: sql sql-server

我想知道是否有更好的方法来编写此更新语句的脚本:

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)

3 个答案:

答案 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