【发布时间】:2013-01-23 19:51:45
【问题描述】:
我正在编写一个查询来更新一个表 (TableA) 使用另一个表 (TableB) 中的值,表 B 针对 TableA 中的每一行返回一个以上的值,并且请求是使用 最大的更新 返回 TableB 中的值。
我可以通过以下方式实现:
UPDATE TableA
SET Value = (SELECT TOP 1 B.Value FROM dbo.TableB B
WHERE TableA.Key = B.Key
ORDER BY B.Value desc)
我不确定这是实现要求的最佳方式,而且我担心上述查询的性能。它是否在表 B 上多次扫描以查找表 A 的每一行的值?
我尝试了一些查询,例如使用
update tableA
set Value = TableB.Value
from (Table A left join Table B ... where ...)
我认为第二个可能有更好的性能,但我无法检索最大的值,因为它不支持“order by"。
加入表 B 两次并比较 B 的值可能会解决问题,但性能可能会比第一次查询更差。
有什么想法吗?
** 实际情况比示例复杂,例如tableA 和 tableB 需要加入“....or....or...or...”,会花费更多。
【问题讨论】:
-
我在“Select”查询中使用了“Row_Number Order By”。当 A 连接 B 很重时,这会更好。
标签: sql sql-server