[英]Updating a record from another table
假设我有一个包含值的表 A:
表A:
Data1 Data2 Data3
--------------------
Val2 null val3
null ValB Val3
和表 B:
Data1 Data2
---------------
Value1 Value2
现在,我想通过检查 TableB 中的值,其中 tableA 的 Val2 等于 TableB 的 Value1,将 Table1 的第二行更新为 Val3。
我曾尝试使用类似的子查询来更新它
update TableA
set Data1=
(Select distinct(B.Data1)
from TableB B,TableA A
where A.Data1=B.Data2 and B.Data2 is null)
where Data3=Val3
查询成功执行,但记录未更新。 tableA 具有集合的特定记录,即它可以是<Data2,Data3> or <null,Data3>
(Data3 不能为空)
任何形式的帮助将不胜感激。
TIA,
问候,
阿布舍克
您的查询有效,只是不像您想要的那样匹配。
根据您的问题(不是您的示例数据,这似乎不符合您的要求),我将这些数据放在一起,希望能为您指明正确的方向
create table tablea(data1 varchar2(8) , data2 varchar2(8), data3 varchar2(8) );
create table tableb(data1 varchar2(8) , data2 varchar2(8) );
insert into tablea values('Val2',null,'Val3');
insert into tablea values(null,'ValB','Val3');
insert into tableB values('Value1','ValB');
insert into tableB values('NewValue','Val2');
update TableA
set Data1 = nvl((Select B.Data1
from TableB B --no need for join, I believe you want to join to the 'updating table'
where /*TableA.Data1=B.Data2
and B.Data2 is null*/ -- this won't work, null DOES NOT EQUAL NULL
TableA.Data1=B.Data2
) ,TableA.Data1) --this way, if no data is returned from tableB.data1 to tableA join we will retain tableA.Data1 value
where Data3='Val3' ;
select * from tableA;
DATA1 DATA2 DATA3
-------- -------- --------
NewValue Val3
ValB Val3
请查看有关您的问题的最初问题,您的 WHERE 子句(和加入)正在使事情不起作用
以下是关于如何根据自身与另一个表之间的连接来更新表的非常概括的概述:
UPDATE TableA
set
TableAColumn = tb.TableBColumn
,TableAOtherColumn = tb.TableBOtherColumn
,etc.
from TableA ta
inner join TableB tb
on tb.JoinColumn = ta.JoinColumn
where ta.FurtherCriteriaColumn = @DesiredTargetValue
and/or tb.OtherCrieterioColumn < = > @SomeOtherValue
etc.
有几种不同的方法可以做到这一点,这只是我使用的基本模板。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.