![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с запросом. [D7]
Очень злой © (2011-02-25 16:06:00)Делаю такой запрос: (смысл: заполнить поле 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 (строку выделил жирным).
Подскажите, пожалуйста, как решить проблему?
Кщд (2011-02-26 08:40:00) [1]
SELECT max(b.t2field1) keep (dense_rank last order by b.t2field3)
FROM sometable2 b
WHERE b.t2field2 = a.t1field2
Очень злой (2011-02-25 18:59:00) [2]
> Это в смысле первое попавшееся? 8-)
>
Нет. Ибо там есть ORDER BY t2field3 DESC, т.е. сначала сортируется по убыванию, потом берется первая запись WHERE ROWNUM = 1 из получившегося..
> Как то так может прокатит (если я не запутался 8-))?
Спасибо. Как-то не подумал что можно статистические фукции использовать в данной ситуации...
Sergey13 (2011-02-25 17:14:00) [3]> Если возникает неоднозначность, то берем наиболее подходящее значение
Это в смысле первое попавшееся? 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)
)