Ошибка SQL-запроса в Oracle - PullRequest
       3

Ошибка SQL-запроса в Oracle

0 голосов
/ 09 ноября 2011

при выполнении следующего запроса:

SELECT ID
  FROM INSTITUTE
 WHERE MEMBER_ID IN (
    SELECT ID 
      FROM MEMBER 
     WHERE ID IN (765,769,753,774,778,779,781,790,799,809,
                  820,823,855,835,839,842,845,849,850,851)
    ORDER BY NAME ASC
)

Я получаю следующую ошибку:

ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:
Error at Line: 5 Column: 81

Как я могу устранить эту ошибку ???

Ответы [ 7 ]

3 голосов
/ 09 ноября 2011

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

Переместите его за пределы выборки.

SELECT id
  FROM institute
 WHERE member_id IN
          (  SELECT id
               FROM MEMBER
              WHERE id IN ( 765, 769, 753, 774, 778, 779, 781, 790,
                            799, 809, 820, 823, 855, 835, 839, 842,
                            845, 849, 850, 851 )
          )
 ORDER BY name ASC

Примечание: IМожно только предположить, что name является столбцом в таблице institute, так как в противном случае ORDER BY будет полностью избыточным.Поэтому следует упорядочить основной SELECT.

или полностью удалить его ...

SELECT id
  FROM institute
 WHERE member_id IN
          (  SELECT id
               FROM MEMBER
              WHERE id IN ( 765, 769, 753, 774, 778, 779, 781, 790,
                            799, 809, 820, 823, 855, 835, 839, 842,
                            845, 849, 850, 851 )
          )

Не будет ли этот запрос более эффективным?

SELECT i.id
  FROM institute i
 INNER JOIN member m
    ON (i.member_id = m.id)
 WHERE m.id IN ( 765, 769, 753, 774, 778, 779, 781, 790,
                 799, 809, 820, 823, 855, 835, 839, 842,
                 845, 849, 850, 851 )
1 голос
/ 09 ноября 2011

Ваш ORDER BY в дополнительном выборе бесполезен. Вместо этого рассмотрите возможность объединения двух таблиц, например:

SELECT ID
FROM INSTITUTE i, MEMBER m
WHERE
i.MEMBER_ID = m.ID
AND i.MEMBER_ID IN
    (
        765,769,753,774,778,779,781,790,799,809,820,823,855,835,839,842,845,849,850,851
    )
ORDER BY m.NAME
0 голосов
/ 09 ноября 2011

order by в подзапросе совершенно бесполезен, он вообще не упорядочит вывод.Удалите его, и он будет работать.

Кстати, перемещение его наружу не даст ожидаемого результата, за исключением того, что institute.name имеет те же значения, что и member.name; -)

0 голосов
/ 09 ноября 2011

Вероятно, это связано с тем, что ваше предложение ORDER BY находится внутри внешнего предложения MEMBER_ID IN(...).

Этот запрос выглядит подозрительно, как если бы его выполняли с помощью JOIN вместо двух предложений IN():

SELECT INSTITUTE.id
FROM 
  INSTITUTE JOIN MEMBER ON INSTITUTE.MEMBER_ID = MEMBER.ID
WHERE MEMBER.ID IN IN (765,769,753,774,778,779,781,790,799,809,820,823,855,835,839,842,845,849,850,851)
ORDER BY MEMBER.NAME ASC
0 голосов
/ 09 ноября 2011
SELECT ID FROM INSTITUTE 
WHERE MEMBER_ID IN ( SELECT ID FROM MEMBER WHERE ID IN
( 765,769,753,774,778,779,781,790,799,809,820,823,855,835,839,842,845,849,850,851 )) ORDER BY NAME ASC;

Попробуйте - ваш заказ в неправильном месте.

0 голосов
/ 09 ноября 2011

Попробуйте это -

SELECT ID 
FROM INSTITUTE 
WHERE MEMBER_ID IN (
SELECT ID FROM MEMBER WHERE ID IN (765,769,753,774,778,779,781,790,799,809,820,823,855,835,839,842,845,849,850,851))
ORDER BY NAME ASC

Я подозреваю, что вам нужен оператор ORDER BY вне условия IN

0 голосов
/ 09 ноября 2011

упорядочить по пункту IN

SELECT ID
FROM INSTITUTE
WHERE MEMBER_ID IN (
SELECT ID FROM MEMBER WHERE ID IN (
765,769,753,774,778,779,781,790,799,809,820,823,855,835,839,842,845,849,850,851 )
)
ORDER BY NAME ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...