从另一个表更新记录

时间:2011-04-28 14:03:16

标签: sql oracle

假设我有一个表格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,

此致

阿布舍克巴克

2 个答案:

答案 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.

有几种不同的方法可以做到,这只是我使用的基本模板。

相关问题