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

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    

【讨论】:

以上是关于基于链接三个表中的数据更新项目的主要内容,如果未能解决你的问题,请参考以下文章

将一个项目链接到同一个表中的另一个项目

根据另一张表中的值更新一张表

从三个表中提取数据;试图列出员工正在从事的项目的项目编号、项目名称和工作时间

如何一次将数据插入和更新到 EF 多个表中

使用按钮更新表中的值

在 SQL 或 LINQ 中基于月份计算三个表中的条目