2011-03-18 2 views
0

쿼리를 실행할 때 표시되는 행 수를 제한하려고합니다.Oracle sql 오른쪽 괄호가 누락되었습니다.

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

을하고 그것을 잘 작동합니다 : 나는 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; 

나는 내부 쿼리를 실행했습니다. 다른 한편으로는 쿼리의 OR 부분을 제거하고 제한 행 쿼리를 포함시키면서 지정한 행 수를 반환합니다.

내 코드가 정확히 무엇입니까?

+0

'select row_number()'로 시작하여') a'로 끝나는 부분도 시도해 보겠습니다. 어쨌든, 그 오류는 어리석은 것처럼 보입니다. 오류를 유발하는 쿼리의 일부 요소가 특정 배열로있을 수 있습니다. 개인적으로 나는 이것을 (하나씩 또는 조합하여) 시도 할 것입니다 :'a. *'를'row_number() ... '앞에 놓으십시오; '('''select row_number() ...를 별도의 줄에 남기고,''를 앞에두고''rnum ... '을 별도의 줄에 둡니다. 반대로 앞의'(';와 마찬가지로''a''와''rnum ...''의 행을 합쳐서 가장 안쪽 셀렉트의'SELECT *'를 같은 줄에 놓습니다. –

답변

0

가장 좋은 추측은 하위 선택에 별칭을 지정하는 것이 싫어서 "a"에서 "a"에 구문 오류가 발생한다는 것입니다.

0

오라클에 대해서는 기억하지 않지만 실제로 MySQL에서 별칭을 사용하려면 하위 선택이 필요하다는 것을 알고 있습니다. 나는 당신의 바깥 쪽 sub-select에 하나를 추가하려고한다.

+0

는 I이 시도 :. (reservation_code하여 (순서) rnum 위에 ROW_NUMBER()를 선택에서 선택 *를, B * (\t \t SELECT *로부터 트랜스 Z \t LEFT 이메일에게 가입 FROM \t ON z.email1_hist_id = A .email_id \t 또는 z.email2_hist_id = a.email_id \t) b ) c 여기서 rnum은 51과 100 사이입니다. 하지만 여전히 오른쪽 괄호 오류가 누락되었습니다. :( – Mitch

1

이 작동합니다 -이 때문에 * 내부 쿼리에서 쿼리를 여행 할 것이다 - 당신이 transemails 사이에 중복 된 열 이름이 없는지 확인 또한, 확인 하위 쿼리

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; 

의 두 단계가 필요하지 않습니다 중복 된 이름을 반환 할 수 없습니다.