SQL根据ID匹配从一个表更新到另一个表
我有一个account numbers
和card numbers
的数据库。 我将它们与一个文件相匹配,以便将任何卡号update
为帐号,以便我只使用帐号。
我创建了一个链接表与账户/卡数据库的视图,以返回Table ID
和相关账户号码,现在我需要更新ID与账户号码匹配的那些记录。
这是Sales_Import
表,需要更新account number
字段:
LeadID AccountNumber
147 5807811235
150 5807811326
185 7006100100007267039
这是RetrieveAccountNumber
表,我需要从这里更新:
LeadID AccountNumber
147 7006100100007266957
150 7006100100007267039
我尝试了下面,但到目前为止没有运气:
UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import]. LeadID =
RetrieveAccountNumber.LeadID)
它将卡号更新为帐号,但帐号被NULL
替换
我相信带有JOIN
的UPDATE FROM
将有助于:
MS SQL
UPDATE
Sales_Import
SET
Sales_Import.AccountNumber = RAN.AccountNumber
FROM
Sales_Import SI
INNER JOIN
RetrieveAccountNumber RAN
ON
SI.LeadID = RAN.LeadID;
MySQL和MariaDB
UPDATE
Sales_Import SI,
RetrieveAccountNumber RAN
SET
SI.AccountNumber = RAN.AccountNumber
WHERE
SI.LeadID = RAN.LeadID;
将内容从一个表格复制到另一个表格的简单方法如下:
UPDATE table2
SET table2.col1 = table1.col1,
table2.col2 = table1.col2,
...
FROM table1, table2
WHERE table1.memberid = table2.memberid
您还可以添加条件以获取复制的特定数据。
对于SQL Server 2008 +使用MERGE
而不是专有的UPDATE ... FROM
语法有一些吸引力。
除了作为标准SQL并因此更具可移植性之外,如果源端有多个连接行(因此在更新中使用多个可能的不同值),而不是最终结果不确定,它也会引发错误。
MERGE INTO Sales_Import
USING RetrieveAccountNumber
ON Sales_Import.LeadID = RetrieveAccountNumber.LeadID
WHEN MATCHED THEN
UPDATE
SET AccountNumber = RetrieveAccountNumber.AccountNumber;
不幸的是,选择使用哪一种可能并不完全归结为首选风格。 SQL Server中MERGE
的实现已经受到各种错误的困扰。 Aaron Bertrand在这里汇编了一份报告清单。
上一篇: SQL update from one Table to another based on a ID match