-
Очень злой (25.02.11 16:06) [0]Делаю такой запрос: (смысл: заполнить поле t1field1 значениями из другой таблицы. Если возникает неоднозначность, то берем наиболее подходящее значение)UPDATE sometable1 a
SET t1field1 = (SELECT t2field1
FROM (SELECT t2field1 , t2field3
FROM sometable2
WHERE t2field2 = a.t1field2
ORDER BY t2field3 DESC)
WHERE ROWNUM = 1)
WHERE EXISTS (SELECT null
FROM sometable2
WHERE t2field2 = a.t1field2)
Получаю сообщение об invalid identifier (строку выделил жирным).
Подскажите, пожалуйста, как решить проблему? -
> Если возникает неоднозначность, то берем наиболее подходящее значение
Это в смысле первое попавшееся? 8-)
> Получаю сообщение об invalid identifier (строку выделил жирным).
Присвой алиас втаблице в подзапросе и используй его. Возможно есть такое поле в обеих таблицах.
Как то так может прокатит (если я не запутался 8-))?SET t1field1 = (SELECT t2field1 FROM sometable2 t2 WHERE t2.t2field2 = a.t1field2 and t2.t2field3=
(select max(t2field3) FROM sometable2 t3 WHERE t3.t2field2 = a.t1field2)
) -
Очень злой (25.02.11 18:59) [2]
> Это в смысле первое попавшееся? 8-)
>
Нет. Ибо там есть ORDER BY t2field3 DESC, т.е. сначала сортируется по убыванию, потом берется первая запись WHERE ROWNUM = 1 из получившегося..
> Как то так может прокатит (если я не запутался 8-))?
Спасибо. Как-то не подумал что можно статистические фукции использовать в данной ситуации... -
Кщд (26.02.11 08:40) [3]
SELECT max(b.t2field1) keep (dense_rank last order by b.t2field3)
FROM sometable2 b
WHERE b.t2field2 = a.t1field2