Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с запросом. [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)
               )


Наверх

Титульная страница Поиск, карта сайта Написать письмо