MySQL左连接子查询失败

时间:2010-02-19 17:57:07

标签: mysql subquery left-join

以下查询在MySQL 5.x中运行良好

SELECT
  m_area.id, m_area.cn_areaName, m_area.de_areaName,
  m_area.en_areaName,m_area.jp_areaName,t_shop.count
FROM
  m_area left join   
(
select t_shop.areaID, count(areaID) AS count
from t_shop
group by t_shop.areaID
) t_shop
on m_area.id = t_shop.areaID

但是,当我必须在具有相同数据库结构和数据的4.0.23 MySQL数据库中运行它时,它只返回以下消息:

  

1064 - 您的SQL语法出错。检查与MySQL服务器版本对应的手册,以便在'[

附近使用正确的语法
            select t_shop.areaID, count(areaID) AS count
            from t_s 

我尝试了很多次但仍然失败了。是否在MySQL 4.x中不允许连接到子查询?那意味着我必须用临时表做这个吗?

提前致谢!

3 个答案:

答案 0 :(得分:4)

MySQL 4.0没有很好地支持子查询:它可以使用它们(至少,以某种真实,有用的方式)与MySQL 4.1 - 而且MySQL 4.0真的很旧,现在...


例如,参见MySQL手册的这一页:12.2.8. Subquery Syntax (引用,强调我的)

  

从MySQL 4.1开始,所有子查询表单和操作即   支持SQL标准,   以及一些功能   MySQL特定

     

使用4.1之前的MySQL版本   有必要解决或   避免使用子查询
在   很多情况下,子查询都可以   使用连接成功重写   和其他方法。请参阅Section 12.2.8.11, “Rewriting Subqueries as Joins for Earlier MySQL Versions”

答案 1 :(得分:1)

我唯一想到的就是在子查询中将表名添加到您的区域IS或将保留字count重命名为cnt。

SELECT  m_area.id
        , m_area.cn_areaName
        , m_area.de_areaName
        , m_area.en_areaName
        ,m_area.jp_areaName
        ,t_shop.cnt
FROM     m_area 
        left join ( 
          select     t_shop.areaID
                    , count(t_shop.areaID) AS cnt 
          from       t_shop 
          group by   t_shop.areaID 
        ) t_shop on m_area.id = t_shop.areaID 

答案 2 :(得分:1)

取出“,count(areaID)AS计数”

子查询中的多个列搞乱了连接。

临时表应该可以正常工作....

玩得开心!