2014-07-08 3 views
0

오류가 발생하지만 문제가 있습니다. plz 그래서이 문제를 해결하는 데 도움이됩니다.오류가있는 SQL 문

select Train_name from TRAIN where Train_id in 
(select Train_id from ROUTE where source_distance in (select source_distance from ROUTE   where stop_number in 
    (select Station_id from STATION where Station_name='Kulaura Railway Station')) < source_distance in 
     (select source_distance from ROUTE where stop_number in 
      (select Station_id from STATION where Station_name='Saistagonj Railway Station'))); 

오류 :

ORA-00907: missing right parenthesis 
*Cause: 00907. 00000 - "missing right parenthesis" 
*Action: Error at Line: 73 Column: 87 
+0

무엇이 오류입니까? –

+0

ORA-00907 : 누락 된 오른쪽 괄호 00907. 00000 - "오른쪽 괄호 누락" * 원인 : * 작업 : 라인에서 오류 : 73 칼럼 : 87 @Kris Gruttemeyer – Patriotic

+0

'<'기호 ..... : ( – Patriotic

답변

0

가 추가 )< 제거합니다.

대신 SubQuery

SELECT train_name 
FROM train 
WHERE train_id IN (SELECT train_id 
        FROM route 
        WHERE source_distance IN (SELECT source_distance 
               FROM route 
               WHERE 
          stop_number IN (SELECT station_id 
              FROM station 
              WHERE 
          station_name = 'Kulaura Railway Station') AND 
            source_distance IN (SELECT source_distance 
                 FROM route 
                 WHERE 
            stop_number IN (SELECT station_id 
                FROM station 
                WHERE 
            station_name = 'Saistagonj Railway Station')) 
        ); 

당신은 JOIN의 서브 쿼리보다 더 빨리 대부분의 경우 JOIN

을 사용할 수 있습니다 시도하고 빨리이 될 수있는 서브 쿼리에 대해 매우 드물다.

JOIN RDBMS는 쿼리에 더 적합한 실행 계획을 만들 수 있으며 모든 쿼리를 실행하고 모든 쿼리를 실행하는 하위 쿼리와 달리 처리 할로드 할 데이터를 예측하고 시간을 절약 할 수 있습니다. 처리 할 데이터.

하위 쿼리의 장점은 JOIN보다 읽기 쉽다는 것입니다. 이것이 바로 새로운 SQL 사용자들이 선호하는 이유입니다. 그것은 쉬운 길입니다. 하지만 성능면에서 볼 때 읽기 힘들지는 않지만 대부분의 경우 JOINS가 더 좋습니다.

SELECT T.train_name 
FROM train T JOIN route R ON R.train_id = T.train_id 
      JOIN station St On St.station_id = R.stop_number 
WHERE St.station_name = 'Kulaura Railway Station' OR St.station_name = 'Saistagonj Railway Station' 
+0

내가 사용하는 경우 AND < or > 대신 두 값을 비교하지 않습니다 ..... – Patriotic

+0

나는 SQL을 처음 사용합니다. 만약 내가 다음 가입 쿼리를 사용하여 더 많은 일을 할 것이라고 생각합니다. 내가 옳은지 나쁜지는 잘 모릅니다. 바람직한 조인 또는 서브 쿼리입니다. – Patriotic

+0

더 좋을 것입니다. –