Обновление записи из другой таблицы - PullRequest
1 голос
/ 28 апреля 2011

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

ТАБЛИЦА A:

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

и таблица B:

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

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

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

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> (данные 3 не могут быть нулевыми)

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

TIA,

С уважением,

Абхишек

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

Ваш запрос работает, он просто не соответствует желаемому.

На основании вашего вопроса (не ваших выборочных данных, которые, кажется, не соответствуют вашим требованиям), я собрал это внадеюсь, вы укажете правильное направление

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 (и присоединение) делает так, чтобы все не работало

0 голосов
/ 28 апреля 2011

Вот очень общая схема обновления таблицы на основе соединения между собой и другой таблицей:

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.

Существует несколько различных способов сделать это, это всего лишь базовый шаблонЯ использую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...