Конференция "Базы" » Проблема с запросом. [D7]
 
  • Очень злой (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 (строку выделил жирным).
    Подскажите, пожалуйста, как решить проблему?
  • Sergey13 © (25.02.11 17:14) [1]
    > Если возникает неоднозначность, то берем наиболее подходящее значение
    Это в смысле первое попавшееся? 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

 
Конференция "Базы" » Проблема с запросом. [D7]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]