Обновление таблицы с присоединением ко второй таблице - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь обновить значение в столбце 'ID' из таблицы 1 значением в столбце 'ID' из таблицы 2 - только если они не совпадают.Я думаю, что у меня есть все, кроме оператора set.

Мне интересно, является ли это наилучшим способом решения этой проблемы и как отформатировать подзапрос для этого типа проблемы

update table1 B
set B.id = (select A.id
                    from table2 A 
                    where  B.num = A.num
                    and B.name = A.name)
where B.num = A.num
and B.name = A.name
and B.id <> A.id
;

Ответы [ 3 ]

1 голос
/ 03 мая 2019

Может как то так?

update B
set B.id=A.Id
from table1 B
  join table2 A
    on B.num=A.num
   and B.name=A.name
   and B.id<>A.id
0 голосов
/ 04 мая 2019

Используйте команду MERGE.

Вот базовый пример:

    MERGE INTO table1 a
    USING (SELECT bb.asdf,cc.zxcv
           from table2 bb,table3 cc
           where bb.field1=cc.field1) b
    ON (a.asdf=b.asdf)
    WHEN MATCHED THEN
    UPDATE SET a.zxcv=b.zxcv;
0 голосов
/ 03 мая 2019

Oracle не поддерживает join в обновлении.Но вы можете использовать два подзапроса:

update table1 B
    set id = (select A.id
              from table2 A 
              where B.num = A.num and
                    B.name = A.name
             )
    where exists (select A.id
                  from table2 A 
                  where B.num = A.num and
                        B.name = A.name and
                        B.id <> A.id
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...