оракул подзапрос с заказом не работает - PullRequest
0 голосов
/ 26 апреля 2018

когда я запускаю следующий запрос:

select 
  (
    select  t.person_uid 
    from    table1 t 
    where   t.CELL_PH_NUM = table2.CELL_PH_NUM 
            and rownum<2
    order by t.created desc
  )
  from  temp table2 ;

... Oracle возвращает следующую ошибку:

ORA-00907: отсутствует правая скобка

Я не могу понять, где ошибка:

  1. Если я удаляю order by, ошибка не возвращается и запрос выполняется правильно (но не возвращает то, что мне нужно)
  2. Если я запускаю автономный подзапрос (заменяя table2.CELL_PH_NUM на фиксированное значение), ошибка не возвращается, а запрос возвращается правильно (но не возвращает то, что мне нужно)

Где ошибка?

1 Ответ

0 голосов
/ 26 апреля 2018

Ваш запрос на самом деле не делает то, что вы хотите, потому что where применяется до order by. Таким образом, вы не получите самую последнюю строку, обязательно.

К сожалению, Oracle не позволяет вам использовать другой уровень подзапросов, потому что предложение корреляции не будет работать. Но есть решение:

select (select max(t.person_uid) keep (dense_rank first order by t.created desc)
        from table1 t
        where table1.CELL_PH_NUM = table2.CELL_PH_NUM 
       )
from temp table2 ;

В версии запроса в вашем вопросе table1 не определено. Это может быть связано с ошибкой, которую вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...