2014-02-22 167 views
1

这是我为postgresql编写的那种代码的一个非常具体的问题,我正在为项目需求迁移到mysql。MySQL错误代码1064语法错误

在MySQL至今编写的代码如下:

(select substring(dt,1,9) as dt,concat(vish,visl,visn) as vis,ip 
    from assignment_walmart.b 
    where service='ss' and ua not like '%ktxn%' 
     and ua not like '%khte%' 
     and ua not like '%keynote%' 
     group by 1,2,3 
    ) as A1 

    left join // This is where it shows the error. 

    (select ip,flag from 
    assignment_walmart.b1 
    group by 1,2  
    ) as A2 

    on A1.ip=A2.ip 
    where A2.flag is NULL 
    group by 1,2; 

该错误是两个选择的表为“A1”和“A2”的命名近弹出,所以我假设它的不允许在MySQL中。

你能帮我解决上述代码的替代语法吗?因为我必须以这种方式使用这两个表格才能加入以获得所需的结果。

我到底该如何使用别名或以这样的方式连接2个表,这在postgresql中工作得很清楚?

任何帮助,将不胜感激。

+0

如果这是所有的代码,然后再考虑它基本上'A1左加入a2' ......那'A1'是不完全合法的sql。试试'从A1左边加入select * ...' –

回答

3

你有一个子查询连接到另一个查询。这在两个数据库中都不适用。你需要在select或类似的东西来包装这些:

select A2.dt, A2.vis, count(*) 
from (select substring(dt,1,9) as dt, concat(vish,visl,visn) as vis,ip 
     from assignment_walmart.b 
     where service='ss' and ua not like '%ktxn%' 
      and ua not like '%khte%' 
      and ua not like '%keynote%' 
     group by substring(dt,1,9), concat(vish,visl,visn), ip 
    ) as A1 left join // This is where it shows the error. 
    (select ip,flag from 
     assignment_walmart.b1 
     group by ip, flag 
    ) as A2 
    on A1.ip=A2.ip 
where A2.flag is NULL 
group by A2.dt, A2.vis; 

我你想要什么外部查询什么的聚集字段进行猜测。明确哪些字段被汇总是一个好主意。

+0

非常感谢,明白我的错误。 –

0

它看起来像缺少外部查询中的SELECT ... FROM

它看起来你的意思是你的查询是这样的形式:

SELECT ... 
    FROM (inline view query) A1 
    LEFT 
    JOIN (inline view query) A2 
    ON A1.col = A2.col ... 
WHERE ... 
GROUP BY ... 
+1

谢谢斯宾塞,理解我的错误。 我只是想尝试一段代码来检查它是否正确连接,但现在我明白了,代码是不完整的,没有选择语句只。 –