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 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获得在“左外连接”附近使用的正确语法

(SELECT distinct c.star_ident,c.fix_ident from corept.std_sta' 在第 3 行

我使用了左连接,以便我可以从上述两个查询中获取数据差异。我什至将 where 条件放在最后。

4

2 回答 2

4

发现错误的一种好方法是将其分解并分别尝试组件。例如,尝试:

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了 afterWHERE导致语法错误的子句。

于 2013-03-22T06:55:17.240 回答