2009-10-07 9 views
0

누락 것은 여기 내 쿼리입니다 :오라클 오른쪽 괄호

SELECT * FROM Auta WHERE SUBSTR(spz, 1, 2) = 
(SELECT SUBSTR(spz, 1, 2) FROM Auta WHERE typ = 'BMW' AND specifikacia_typu = 'Z1' LIMIT 1); 

그리고 내가 그것을 실행할 때이 오류가 얻을 : 나는 조금 필사적지고있어

ORA-00907: missing right parenthesis 

을, 나는 이미 추가 시도했습니다 쿼리에서 괄호를 사방에 묻지 만 여전히 오류가 발생합니까? 쿼리에는 3 개의 왼쪽 괄호와 3 개의 오른쪽 괄호가 있으므로 모든 것이 올바르게되어야합니다.

답변

7

LIMIT 절이 Oracle에 없습니다. 대신에 rownum을 사용할 것입니다 :

SELECT * 
    FROM Auta 
WHERE SUBSTR(spz, 1, 2) = (SELECT SUBSTR(spz, 1, 2) 
           FROM Auta 
          WHERE typ = 'BMW' 
           AND specifikacia_typu = 'Z1' 
           AND ROWNUM = 1); 
+1

감사합니다 예상 결과를 제공한다. 나는 Oracle에 익숙하지 않고 MySQL과 PostgreSQL에 익숙하다 :) –

+0

"ROWNUM = 1"문법에주의해야한다. 이 시나리오에서 작동하는지 여부는 알 수 없지만 하위 쿼리에서 반환되는 레코드는 불확실합니다. 즉, 쿼리를 실행할 때마다 다른 레코드가 반환 될 수 있습니다. 일관된 반환을 원하면 하위 쿼리를 "하위 정렬 순서"가있는 다른 하위 쿼리로 래핑하십시오. –

+0

@ 닉 : 원래 LIMIT 1의 결과도 미정입니다. 어쨌든 ORDER BY가 없으므로 어떤 행도 괜찮을 것이라고 가정했습니다. –

3

"LIMIT 1"은 무엇인가요? 그게 올바른 오라클 구문이라고 생각하지 않습니다. 당신은 하나의 행에 출력을 제한하려는 경우, 사용

ROWNUM = 1

3

LIMIT (1) 내가 아는 같은 MySQLism입니다.

SELECT * 
    FROM Auta 
    WHERE SUBSTR(spz, 1, 2) = 
     (SELECT SUBSTR(spz, 1, 2) 
      FROM Auta 
     WHERE typ = 'BMW' 
      AND specifikacia_typu = 'Z1' 
      AND ROWNUM = 1); 

은 ... 당신에게