sql - 通过在不同的表中查找来更新 SQL 中的记录
问题描述
我正在将 SQL 服务器 A 中的几个表中的数据复制到 B。我在 B 中有一组临时表,需要根据 B 中最终目标表中的更新值更新其中一些临时表。
例子:
服务器 B:
暂存表1:
ID | NAME | CITY
1 ABC XYZ
2 BCD XXX
暂存表2:
ID | AGE | Table1ID(FK)
10 15 1
20 16 2
将 StagingTable1 复制到 TargetTable1 后(ID 被自动填充,我得到新的 ID,现在 ID 1 变为 2,ID 2 变为 3)
目标表1:
ID | NAME | CITY
1 PQR YYY (pre-existing record)
2 ABC XYZ
3 BCD XXX
所以现在在我可以复制 StagingTable2 之前,我需要通过 TargetTable1 中的正确值来更新其中的 Table1ID 列。
StagingTable2 应该变成:
ID | AGE | Table1ID(FK)
10 15 2
20 16 3
我正在为此编写一个存储过程,但不确定如何查找和更新临时表中的记录?
解决方案
假设元组在和(name, city)
中是唯一的,您可以使用可更新的公用表表达式来生成新的映射并分配相应的值:StagingTable1
TargetTable1
with cte as (
select st2.Table1ID, tt1.id
from StagingTable2 st2
inner join StagingTable1 st1 on st1.ID = st2.Table1ID
inner join TargetTable1 tt1 on tt1.name = st1.name and tt1.city = st1.city
)
update cte set Table1ID = id
DB Fiddle 上的演示-StagingTable2
之后的update
:
编号 | 年龄 | 表 1ID -: | --: | --------: 10 | 15 | 2 20 | 16 | 3
推荐阅读
- php - 在 php 中生成适合锻炼时如何解决标题问题?
- java - 是否有一种简单的方法可以附加一个新列,该列对于 csv 中的所有行都具有相同的值?
- r - 将新提示随机添加到系统发育树中的不同特定位置
- postgresql - 使用 postgresql 动态选择行并合并它们
- python - Azure 管理容器实例 SDK
- amazon-web-services - AWS CDK 中的 InterfaceVpcEndpoint 与 VpcEndpoint
- php - 在 php 后端和 angularjs 前端用变量替换主机名
- asp.net-core-2.0 - 如何使用.net core 配置多个 okta 服务器的身份验证?
- python - 在 python 中,如何使嵌套模块看起来没有嵌套到 import 语句中?
- java - 选项和函数的使用