SQL根据ID匹配从一个表更新到另一个表

我有一个account numberscard 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替换


我相信带有JOINUPDATE 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在这里汇编了一份报告清单。

链接地址: http://www.djcxy.com/p/94217.html

上一篇: SQL update from one Table to another based on a ID match

下一篇: Javascript search and replace not working