0
SELECT name,trans FROM skyplan_deploy.deploy_stars d WHERE d.apt='KOPF' AND d.name!=d.trans  

LEFT OUTER JOIN  

(SELECT distinct c.star_ident,c.fix_ident from corept.std_star_leg c  
    INNER JOIN  
    (SELECT star_ident,transition_ident,max(sequence_num) seq,route_type  
     FROM corept.std_star_leg  
     WHERE data_supplier='J' AND airport_ident='KOPF'  
     group by star_ident,transition_ident)b  
    ON c.sequence_num=b.seq and c.star_ident=b.star_ident and   c.transition_ident=b.transition_ident) as y  
ON c.sid_ident=x.name AND c.fix_ident=x.trans  
where y.data_supplier='J' and y.airport_ident='KOPF' and y.name is null; 

上記のクエリを実行すると、次の構文エラーが発生します。

SQL 構文にエラーがあります。near 'LEFT OUTER JOIN を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

(3 行目で、corept.std_sta から個別の c.star_ident,c.fix_ident を選択します。

上記の 2 つのクエリからデータの違いを取得できるように、左結合を使用しました。where 条件を最後に配置しました。

4

2 に答える 2

4

エラーを見つけるための 1 つの良い手法は、エラーを分解してコンポーネントを個別に試すことです。たとえば、次を試してください。

SELECT star_ident,transition_ident,max(sequence_num) seq,route_type  
FROM corept.std_star_leg  
WHERE data_supplier='J' AND airport_ident='KOPF'  
group by star_ident,transition_ident

これがそのサブクエリに問題があるかどうかを確認します。

クエリに構文エラーはなく、期待した結果が得られない場合は、クエリを理解できる部分に分割することが、通常、最も速くデバッグできる方法です。

于 2013-03-22T06:54:44.043 に答える
3

エラーの理由は、 の無効な使用ですLEFT JOIN。基本的なSELECT構文は次のとおりです。

SELECT ...
FROM ... JOIN...
WHERE ...
GROUP BY...
ORDER BY ...

構文エラーを引き起こす句LEFT JOINの後に使用しました。WHERE

于 2013-03-22T06:55:17.240 に答える