Разрешает ли Oracle ORDER BY в предложении IN? - PullRequest
0 голосов
/ 29 октября 2008

Oracle выдает мне ошибку (ORA-00907: отсутствует правая скобка), когда я запускаю этот запрос:

select * 
from reason_for_appointment 
where reason_for_appointment_id in 
(
    select reason_for_appointment_id 
    from appointment_reason 
    where appointment_id = 11 
    order by appointment_reason_id
)

Однако, когда я запускаю только подзапрос, ошибки нет.

Может кто-нибудь объяснить, в чем проблема?

Ответы [ 5 ]

11 голосов
/ 29 октября 2008

Результаты внутреннего запроса никогда не будут отображаться, поэтому нет смысла делать заказ во вложенном выборе. Вместо этого примените его к внешнему запросу.

3 голосов
/ 30 октября 2008

Проблема в том, что ORDER BY не разрешен внутри такого подзапроса, как этот. Почему ты хотел его иметь?

1 голос
/ 30 октября 2008

Похоже, вы хотите отобразить результаты из одной таблицы, используя порядок, определенный в другой таблице. Внутреннего соединения должно быть достаточно.

select reason_for_appointment.*
from reason_for_appointment rfa, appointment_reason ar
where rfa.reason_for_appointment_id = ar.reason_for_appointment_id
and ar.appointment_id = 11
order by ar.appointment_reason_id;
0 голосов
/ 20 января 2009

Если ваша цель - упорядочить вывод, вы просто хотите переместить ORDER BY за пределы подзапроса:

select * from reason_for_appointment where reason_for_appointment_id in
 (select reason_for_appointment_id from appointment_reason where appointment_id = 11)
 order by reason_for_appointment_id

(Я предполагаю, что там, где вы написали "assign_reason_id", вы имели в виду "reason_for_appointment_id". Если действительно есть два разных столбца с этими именами ... ой.)

0 голосов
/ 20 января 2009

выберите * из аргумента reason_for_appointment, в котором причина_for_appointment_id (выберите аргумент reason_for_appointment_id из назначения_причины, где назначение_идентификатора = 11 по назначению_презентации)

попробуйте что-то вроде: с дополнительным знаком as (выберите аргумент reason_for_appointment_id из параметра назначение_приятия, где идентификатор_перечисления = 11 порядок по назначению_презентации) выберите аргумент reason_for_appointment_id из параметра назначение_причины, в котором причина_for_appointment_id (выберите идентификатор_основы_ из вспомогательного)

...