ORACLE: обновить запрос, используя две таблицы с отношением has - PullRequest
0 голосов
/ 21 мая 2018

Мне нужно обновить данные столбца на основе соответствующей записи, найденной в обеих таблицах.Я хочу обновить запись столбца NAME из TABLE2

Ниже приведены таблицы

 Table1
---------------
 Id | Name | color
 1  | abc  | red
 2  | def  | green
 3  | ghi  | blue


 Table2
---------------
 Id | Name | color |fiedId
 1  | abc  | red   | 1
 2  | def  | green | 1
 3  | ghi  | blue  | 2

Здесь столбец table1 ID - это внешний ключ в таблице table2 как fieldId.

ИтакЯ хочу обновить все записи, которые подпадают под это условие

table1.id = table2.fieldId

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Еще один вариант, используя MERGE:

merge into table2 t2
using (select id, name from table1) x
on (t2.fieldid = x.id)
when matched then update set
  t2.name = x.name;

Или, для установки имени в 'xxx':

merge into table2 t2
using (select id from table1) x
on (t2.fiedid = x.id)
when matched then update set
  t2.name = 'xxx';
0 голосов
/ 21 мая 2018

Звучит так, как будто вы просто хотите обновить вот так:

update table2 t2
set    t2.name =
       ( select t1.name
         from   table1 t1
         where  t1.id = t2.fieldid )

По поводу следующего вопроса:

что делать, если я хочу установить Name = "xxx" для всех соответствийстроки?

update table2 t2
set    t2.name = 'xxx'
where  t2.fieldid in
       ( select t1.id from table1 t1 )

или это можно записать как:

update table2 t2
set    t2.name = 'xxx'
where  exists
       ( select null from table1 t1
         where  t1.id = t2.fieldid )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...