首页 > 解决方案 > 如何在没有连接的情况下覆盖另一个表中的列中的列?

问题描述

我想简单地用另一个表中的列中的值覆盖表中的列中的值。我有一个基于另一个表的表,其中一个列中没有唯一标识符,所以我不想使用连接,而只是更新值,因为行的顺序相同。我怎么做?到目前为止,我已经尝试了两种不同的方法,其中方法 A 仅将第一行的值放入更新表的每一行,而方法 B 根本不起作用。

Approach A:
Update Transactions
SET Transactions.Amount = Transactions_raw.Amount
FROM Transactions_raw


Approach B:
UPDATE Transactions
SET Amount = (SELECT Amount FROM Transactions_raw)

标签: sqlsql-server

解决方案


您假设行的顺序相同可能会误导您。如果您不使用select语句order by并在两个表中看到相同的顺序,那么这不是您想要依赖的。这种所谓的顺序是不保证的。相反,您必须有一些订购规则。当你有这个规则,你可以把它放在 中order by,那么你可以按照这个顺序在两个表中添加 ID 列。

您可以使用以下语句计算 ID 值:

update Transactions 
set Id = row_number() over(order by ...)

然后你可以使用常规inner join的 .


推荐阅读