@Denioo

Как записать результат выборки с inner join в столбец таблицы?

Здравствуйте, я уже задавал подобный вопрос когда хотел перенести с помощью update данные из одной таблицы в другую, тогда выдавало такую ошибку
spoiler
Error starting at line : 1 in command -
update contract_city
set manager_id =
(select contract_manager.manager_id
from contract_manager
where contract_manager.contract_id = contract_city.contract_id)
Error report -
ORA-01427: подзапрос одиночной строки возвращает более одной строки

при таком запросе:
spoiler
update contract_city
set manager_id = 
(select manager_id
from contract_manager
where contract_manager.contract_id = contract_city.contract_id)


Я почитал документацию, нашел вроде то что мне нужно, https://oracleplsql.ru/joins.html
Но опять проблема возникла, если вытягивать просто столбец таких способом, то все нормально, из таблицы contract_manager столбец manager_id вытягивается со всеми значениями.
(select contract_manager.manager_id       
from contract_manager
inner join contract_city
on contract_manager.contract_id = contract_city.contract_id)

но если использовать
update contract_city
set manager_id = 
(select contract_manager.manager_id       
from contract_manager
inner join contract_city
on contract_manager.contract_id = contract_city.contract_id)

Та же ошибка. Не знаете ли вы как можно записать столбец который вытянул с помощью join в одноименный столбец manager_id, таблицы contract_city, или как то по другому.
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 1
duhbox
@duhbox
используйте merge и rowid

merge into target t
using
( with update_list as
(select t.rowid rid, s.n, t.s, s.s should_be_s
from target t, source s
where t.n = s.n
and s.s != t.s)
select u.* from update_list u
) x
on (t.rowid = x.rid)
when matched
then
update set t.s = x.should_be_s
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы