【发布时间】: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 中选择邮政编码))
标签: sql sql-server-2012