Обновить значения в таблице, значениями из другой таблицы
Нужно обновить значение t1 таблицы значениями из t2.
В обоих таблицах есть id и нужно только те, которые есть в обоих таблицах.
Я пробовал сделать это следующим запросом:
update t1 set (t1.n_dog) = (
select t2.n_dog
from t2
join t1 on t1.idblank=t2.idblank);
на что получаю ошибку:
ORA-01427: single-row subquery returns more than one row
Поискав на этом сайте, нашёл подобную тему.
И там есть решение:
UPDATE DISHES d SET (d.price, d.calories) = ( SELECT dc.price, dc.calories
FROM DISH_PRICE_CALORIES dc
WHERE d.id = dc.dish_id );
На мой взгляд, ситуации похожи, но только у меня один столбец.
Почему получаю эту ошибку?
Ответы (1 шт):
Попробуйте так:
update t1 set t1.n_dog = (
select t2.n_dog
from t2
where t2.idblank=t1.idblank);
Если сработает, то решите, что должен получить столбец t1.n_dog, если нет совпадения этих двух таблиц. Так, как выше, он получит значение NULL, если это не устраивает, см. дальше.
Более гибкий способ обновления из другой таблицы в следующем воспроизводимом примере. 3-и записи уже имеют желаемое значение, остаются 6-ь записей:
create table t1 (id, val) as
select rownum, rownum*10
from dual connect by level<=9
/
create table t2 (id, val) as
select id, val+mod (id,3) from t1
/
merge into t1
using t2 on (t2.id = t1.id)
when matched then
update set t1.val = t2.val
where t1.val != t2.val
/
6 rows merged.