更新在另一个表

时间:2016-08-12 10:24:54

标签: sql sql-server sql-server-2008

我想从其他来源更新我的文档表中的记录。

  

文档

Name         , Account Number, Date of birth
S MHLONGO   ,  00000         ,16/12/1986
O CHUMU     ,  00000         ,12/12/1986
V MBONANE   ,  00000         ,09/12/1986
  

客户端

Name, Account Number, Date of birth
    S MHLONGO   ,  33178         ,16/12/1986
    S MHLONGO   ,  33682         ,16/12/1986
    O CHUMU     ,  32892         ,16/12/1986
    V MBONANE   ,  52162         ,16/12/1986

如您所见,我没有要在Documents中链接的帐号,但我可以使用的是姓名和出生日期。但是,可能有两个或更多的S MHLONGO在同一天出生。所以我需要运行一个更新语句,它将在client中搜索名称和出生日期,如果它只有1个条目(在客户端中只有1个条目)与Documents列{{{ 1}}在Name and date of birth

中更新这些记录
Documents
  

文档

Example

我知道它有点冒险,我只是想知道它是否可以完成以及脚本会是什么样子?

我有所有数据库的备份: - )

1 个答案:

答案 0 :(得分:1)

以下是在group by子句中使用joinupdate的方法:

update d 
set account_number = c.account_number
from documents d join
     (select name, date_of_birth, count(*) as cnt,
             min(account_number) as account_number
      from client
      group by name, date_of_birth
      having count(*) = 1
     ) c
     on c.name = d.name and c.date_of_birth = d.date_of_birth;

请注意min(account_number)的使用。这很好,因为如果只有一个帐号,则min()(或max())会返回该帐号。