Предположим, у вас есть следующие значения.
foo(a,b) = [{0,2}]
bar(x,y) = [{1,2},{2,2},{3,2}]
Ответ, приведенный выше, вызывает ошибку ORA-01427. К заявлению нужны некоторые дополнения, которые зависят от ожидаемого результата.
Если вы ожидаете, что наибольший столбец (x, 2) должен храниться в foo (a, 2).
foo(a,b) = [{3,2}]
update foo
set a = (select max(x) from bar where bar.y = foo.b
and bar.x is not null)
where exists
(select *
from bar
where bar.y = foo.b
and bar.x is not null);
Если вы ожидаете какое-либо значение бара (x, 2), напишите следующее.
foo(a,b) = [{[1|2|3],2}]
update foo
set a = (select x from bar where bar.y = foo.b
and bar.x is not null
and rownum < 2)
where exists
(select *
from bar
where bar.y = foo.b
and bar.x is not null);
Порядок подвыбора зависит от хранения и извлечения строки. Оба обновления могут дать одинаковый результат. Без ORDER BY порядок строк не предсказуем. rownum <2 </strong> занимает только первый ряд подвыбора.