sql - 如何在没有连接的情况下覆盖另一个表中的列中的列?
问题描述
我想简单地用另一个表中的列中的值覆盖表中的列中的值。我有一个基于另一个表的表,其中一个列中没有唯一标识符,所以我不想使用连接,而只是更新值,因为行的顺序相同。我怎么做?到目前为止,我已经尝试了两种不同的方法,其中方法 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)
解决方案
您假设行的顺序相同可能会误导您。如果您不使用select
语句order by
并在两个表中看到相同的顺序,那么这不是您想要依赖的。这种所谓的顺序是不保证的。相反,您必须有一些订购规则。当你有这个规则,你可以把它放在 中order by
,那么你可以按照这个顺序在两个表中添加 ID 列。
您可以使用以下语句计算 ID 值:
update Transactions
set Id = row_number() over(order by ...)
然后你可以使用常规inner join
的 .
推荐阅读
- ibm-mq - AMQ6004S:IBM MQ 初始化或结束期间发生错误。退出值 = 71
- javascript - 如何等待我的自定义命令完成,然后执行剩余的赛普拉斯命令
- java - 如何在jstl中使用两个元素迭代列表列表
- email - AppleScript 将所选消息中的多个地址添加到给定规则
- flutter - 如何在主类上分离setState
- java - 类型 T 不能直接实例化(使用泛型进行交换)
- c# - 后台任务中的 .Net Core Channel
- python - 动画 Delaunay 三角剖分 - Python
- javascript - 如何使 store_promo 成为参数?这样我可以在调用函数时进行自定义
- git - 如何将文件夹从一个存储库转移到另一个存储库?