SQL更新多个值

时间:2013-01-23 11:43:33

标签: sql sql-server

我正在编写查询以更新表(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需要加入“......或......或......或......”,费用会更高。

2 个答案:

答案 0 :(得分:1)

对获得INNER JOIN最大值的子查询使用tableB

UPDATE  a
SET     a.Value = b.max_val
FROM    tableA a
        INNER JOIN 
        (
            SELECT  key, MAX(VALUE) max_val
            FROM    tableb
            GROUP   BY  key
        ) b ON a.key = b.key

答案 1 :(得分:1)

您提供的示例使用相关的suqueries,因此对于A中的每一行,将执行子查询。您可以在查询中使用TableA两次避免相关子查询,例如

UPDATE TableA 
SELECT TableA.Col1 = t2.Col1, TableA.Col2 = TableB.Col
FROM TableA t2
INNER JOIN TableB ON ...