Oracle SQL отсутствует правая скобка - PullRequest
0 голосов
/ 18 марта 2011

Я пытаюсь ограничить количество строк, которые будут отображаться при выполнении запроса. Когда я запускаю приведенный ниже код в SQL-разработчике, он возвращает пропущенную ошибку в правой круглой скобке ..

select * from
(select row_number()  over (order by rescode) rnum, a.* from
    (    
     SELECT * 
     FROM trans z 
     LEFT JOIN emails a 
     ON z.email1_hist_id=a.email_id 
     or z.email2_hist_id=a.email_id 
    ) a
)   where rnum between 1 and 50;

Я попытался выполнить внутренний запрос:

SELECT * 
FROM trans z 
LEFT JOIN emails a 
ON z.email1_hist_id=a.email_id 
or z.email2_hist_id=a.email_id

и работает нормально. С другой стороны, я попытался удалить часть ИЛИ в моем запросе и включил запрос ограничения строк, и он возвращает количество строк, которые я указал.

Что именно не так в моем коде?

Ответы [ 3 ]

1 голос
/ 18 марта 2011

Это должно работать - вам не нужно два уровня подзапроса

select *
from
(    SELECT *, row_number()  over (order by rescode) rnum
     FROM trans z 
     LEFT JOIN emails a 
     ON (z.email1_hist_id=a.email_id or z.email2_hist_id=a.email_id)
) x
where rnum between 1 and 50;

Кроме того, убедитесь, что между trans и emails нет повторяющихся имен столбцов - это отключит запрос, потому что * из внутреннего запроса не может возвращать повторяющиеся имена.

0 голосов
/ 18 марта 2011

Я не помню об Oracle, но я знаю, что MySQL на самом деле требует, чтобы подвыборы имели псевдоним.Я бы попробовал добавить один к вашему внешнему подвыбору (перед тем, где rnum ...).

0 голосов
/ 18 марта 2011

Мое лучшее предположение, что вам не нравится давать псевдониму подвыбор, поэтому он выдает ошибку синтаксиса в "a" в ") a)".

...