假设我有一个表格A,其值为:
表A:
Data1 Data2 Data3
--------------------
Val2 null val3
null ValB Val3
和表B:
Data1 Data2
---------------
Value1 Value2
现在我想通过检查表B中的值,其中TableA的Val2等于TableB的Value1,用Val3更新Table1的第2行和TableB的value1。
我曾尝试使用类似
的子类更新它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,
此致
阿布舍克巴克
答案 0 :(得分:1)
您的查询有效,它只是不符合您的要求。
根据您的问题(不是您的样本数据,这似乎不符合您的要求)我把它放在一起,希望能指出正确的方向
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条款(以及加入)正在制定这样的事情,因此事情不起作用
答案 1 :(得分:0)
以下是如何根据自身与另一个表之间的连接更新表的一般概述:
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.
有几种不同的方法可以做到,这只是我使用的基本模板。