基于链接三个表中的数据更新项目
Posted
技术标签:
【中文标题】基于链接三个表中的数据更新项目【英文标题】:Updating item based on linking data in three tables 【发布时间】:2019-01-25 00:19:35 【问题描述】:尝试更新一个字段,同时需要链接三个表,并匹配两个表中的三个字段。
我需要通过将 ID 链接到 TableA 中的 ID 并通过匹配 TableA 中的 Fname、Lname、地址字段来匹配 TableC 中的列表来更新 TableB 选项。
TableA: TableB: TableC:
ID ID
Fname Options Fname
Lname Lname
address address
我尝试过连接和选择,但不知道如何在两个表之间匹配三个字段时进行连接。考虑给TableC加一个ID字段,先从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)))
【问题讨论】:
您使用的是哪个 RDBMS?请在您的问题中添加相关标签(oracle、mysql、sql-server、...)。 请展示您尝试过的内容以及问题所在。还要告诉options
应该如何改变,即UPDATE
之后应该有什么新值。
为了确保在尝试更新之前获得正确的人员列表,我尝试了以下操作:
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 和 TableA.lname=TableC.lname 它没有返回正确的人数(68 而不是 128)
也试过这个,它返回了错误的人员列表(也使用 zip 字段):从 TableB 中选择 *,其中 ID 在(从 TableA 中选择 ID,其中地址在(从 TableC 中选择地址)并压缩(从 TableC 中选择邮政编码))
【参考方案1】:
此更新应该可以工作。试试 Select,用 Where to 消除 Nulls
--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
【讨论】:
以上是关于基于链接三个表中的数据更新项目的主要内容,如果未能解决你的问题,请参考以下文章