Обновление не может вернуть 1 строку, так как не может различить обе строки в таблице test1
, поскольку они имеют одинаковое значение «first». Если вы измените данные на другие значения, они будут работать как положено:
DELETE FROM mapping;
DELETE FROM test1;
INSERT INTO test1(table_name) VALUES ('first');
INSERT INTO test1(table_name) VALUES ('second');
INSERT INTO mapping VALUES ('first','value_1');
INSERT INTO mapping VALUES ('second','value_2');
update test1 a set daily_value = ( select daily_value from mapping b where a.table_name = b.table_name);
2 rows updated.
Лично я предпочитаю выражение MERGE
, хотя, как мне кажется, немного понятнее:
MERGE INTO test1 USING mapping
ON (test1.table_name = mapping.table_name)
WHEN MATCHED THEN UPDATE SET
test1.daily_value = mapping.daily_value;