我正在编写一个查询来更新表(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...”,成本会更高。