Обновление записи из другой таблицы

Предположим, что у меня есть таблица A со значениями:

ТАБЛИЦА А:

Data1 Data2 Data3 -------------------- Val2 null val3 null ValB Val3 

и Таблица B:

 Data1 Data2 --------------- Value1 Value2 

Теперь я хочу обновить 2-ю строку таблицы 1 со значением1 таблицыB для Val3, проверив значение в таблицеB, где значение Val2 таблицы A равно Value1 таблицыB.

Я попытался обновить его, используя subQuery, например

 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 

запрос выполняется успешно, но запись не обновляется. таблица A имеет определенные записи для набора, то есть может быть <Data2,Data3> or <null,Data3> (Data3 не может быть нулевым)

Любая помощь будет оценена по достоинству.

ТИА,

С Уважением,

Абхишек

Ваш запрос работает, он просто не подходит, как вы этого хотите.

Основываясь на вашем вопросе (а не ваши образцы данных, которые, похоже, не подходят для ваших требований), я собрал это вместе, надеюсь, укажу вам на правильное направление

 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. 

Есть несколько способов сделать это, это всего лишь базовый шаблон, который я использую.