仅当记录匹配时才从另一个表中更新记录

Posted

技术标签:

【中文标题】仅当记录匹配时才从另一个表中更新记录【英文标题】:Update records in one table from another only if records match 【发布时间】:2019-08-21 18:10:56 【问题描述】:

我希望使用 Patientdemographics2 中名为 custom 的列更新 Patientdemographs 中名为 custom 的列,但前提是两个表中的 FirstName LastName 和 DateofBirth 列匹配。

Update PatientDemographics
Set PatientDemographics.custom = PatientDemographics2.custom       
FROM            PatientDemographics INNER JOIN
                         PatientDemographics2 ON
                         Patientdemographics.FirstName = Patientdemographics2.FirstName and
                         Patientdemographics.LastName = Patientdemographics2.LastName  and 
                         Patientdemographics.DateofBirth = Patientdemographics.DateofBirth
                         where Patientdemographics.FirstName = Patientdemographics2.FirstName and
                         Patientdemographics.LastName = Patientdemographics2.LastName  and 
                         Patientdemographics.DateofBirth = Patientdemographics.DateofBirth

【问题讨论】:

SQL 服务器 2014 如果您使用具有如此长的表名容易出现印刷错误的表别名,您可以省去很多麻烦。 【参考方案1】:

ON 子句的最后一个条件有错字:

Patientdemographics.DateofBirth = Patientdemographics.DateofBirth

应该是:

Patientdemographics.DateofBirth = Patientdemographics2.DateofBirth

而且您还有一个无用 WHERE 子句,因为它的所有条件都已应用于ON 子句。 还可以使用别名让代码更简单、更易读:

Update p
Set p.custom = p2.custom       
FROM PatientDemographics AS p INNER JOIN PatientDemographics2 AS p2 
ON
  p.FirstName = p2.FirstName and
  p.LastName = p2.LastName  and 
  p.DateofBirth = p2.DateofBirth

【讨论】:

以上是关于仅当记录匹配时才从另一个表中更新记录的主要内容,如果未能解决你的问题,请参考以下文章

仅当两个表中都存在员工时才从临时表中更新员工 ID

仅当记录通过数据修改而更新时才更新日期

仅当另一个表中没有记录时才链接两个表以查找记录

仅当记录不存在时才将 SQL 插入表中[重复]

sql Oracle:仅当值存在时才从另一个表中插入值

从另一个表的多条记录更新一个表中的一条记录。其中一个表的列名是另一个表的字段