美好的一天,
基本上,我有一个引用旧表的系统。但是问题是,我有一个新表(与旧表相同,但主键不同),并且我想将我的系统引用到新表。当前系统已经存储了旧表中的外键。但我想更新这些外部ID以正确引用新表。问题是,旧表由数百条记录组成,我不知道应该使用哪个查询来更新引用新表的系统表。
带有样本数据的旧表列(具有数百条记录)
| CompanyId | Name |
| 4301 | Apple Inc. |
| 4302 | Microsoft |
带有示例数据的新表列(具有相同数据,但主键不同)
| CompanyId | Name |
| 1002 | Apple Inc. |
| 1003 | Microsoft |
这是我的示例表,具有来自旧公司表的外键。
| CustomerId | CompanyId | CustomerName |
| 1 | 4301 | John E. Doe |
| 2 | 4301 | Lorem K. Fox |
我知道的唯一过程是手动创建一个查询。
UPDATE Customer SET CompanyId=1002 WHERE CustomerId=1
但这不是一个好主意,因为我正在处理数百条记录。
请帮忙吗?
答案 0 :(得分:0)
您可以使用join
。假设名称相同:
update s
set s.companyid = nt.companid
from samples s join
oldtable ot
on s.companyid = ot.companyid join
newtable nt
on ot.name = nt.name;
现在请注意以下事项:
您确实指定表“相同”,所以我想这些对于您的特定情况不是问题。
答案 1 :(得分:0)
您将需要创建一个映射表,以将ID从旧表链接到新表。
在您的示例中:
mappingtable
| oldcompanyid | newcompanyid |
| 4301 | 1001 |
| 4302 | 1002 |
然后,您可以通过从旧键到新键的连接来更新客户表:
update s
set s.companyid = nt.companyid
from samples s join
mappingtable t on s.companyid=t.oldcompanyid join
newtable nt
on t.newcompanyid = nt.companyid