根据三个表中的链接数据更新项目

时间:2019-01-25 00:19:35

标签: sql sql-server-2012

尝试在需要链接三个表并匹配其中两个表中的三个字段时更新字段。

我需要通过将ID链接到TableA中的ID并通过匹配TableA中的Fname,Lname,地址字段来匹配TableC中的列表来更新TableB选项。

TableA:        TableB:         TableC:
ID             ID
Fname          Options         Fname
Lname                          Lname
address                        address

我尝试了联接和选择,但无法弄清楚如何联接两个表之间的三个字段。考虑将ID字段添加到TableC,然后先从TableA更新ID字段,然后更新TableB,但仍然无法弄清楚如何匹配这三个字段。我没有得到所有结果。

select TableB.options, TableA.fname, TableA.lname from TableB inner join TableA on TableB.id = TableA.id inner join TableC on TableA.address = TableC.address where TableA.firstname=TableC.fname and TableA.lname=TableC.lname 

它没有返回正确的人数(68而不是128)。

也尝试过此操作,它返回了错误的人员列表(也使用zip字段):

Select * from TableB where ID in(Select ID from TableA where Address in(Select Address from TableC) and zip in (Select Zipcode from TableC))

在进一步调查后,由于数据不匹配,一些记录将不会显示,但是对于那些应该匹配的记录,我想在TableC中更新一个新的ID字段。尝试了以下操作,但收到一条错误消息,提示我需要一个EXISTS:

update atblundeliverables set personid= (select id, firstname, lastname from tblpeople where firstname in (select firstname from atblundeliverables where street in (select addressline1 from atblundeliverables)))

1 个答案:

答案 0 :(得分:0)

此更新应该有效。尝试“选择”,并在哪里消除空值

--Update dbo.[Link3_TableB]
--  Set Options = 'doesMATCH'
Select Options
      ,dbo.[Link3_TableB].*
      ,dbo.[Link3_TableA].*
      ,dbo.[Link3_TableC].*
From      dbo.[Link3_TableB]
Left Join dbo.[Link3_TableA]
       On dbo.[Link3_TableB].ID = dbo.[Link3_TableA].ID
Left Join dbo.[Link3_TableC]
       On dbo.[Link3_TableA].Fname   = dbo.[Link3_TableC].Fname
      and dbo.[Link3_TableA].Lname   = dbo.[Link3_TableC].Lname
      and dbo.[Link3_TableA].address = dbo.[Link3_TableC].address
Where Not dbo.[Link3_TableA].ID Is Null  
And   Not dbo.[Link3_TableC].Fname Is Null