繁体   English   中英

MySQL左连接子查询失败

[英]MySQL left join subquery fail

以下查询在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中不允许左联接子查询吗? 那意味着我必须用一个临时表来做?

提前致谢!

子查询在MySQL 4.0中并没有得到很好的支持:可以 MySQL 4.1中使用子查询(至少以某种真实,有用的方式) -MySQL 4.0确实很老,现在...


例如,请参见MySQL手册的此页面: 12.2.8。 子查询语法 (引用,强调我的)

从MySQL 4.1开始,支持SQL标准要求的所有子查询形式和操作,以及一些特定于MySQL的功能。

对于4.1之前的MySQL版本,有必要解决或避免使用子查询
在许多情况下,可以使用联接和其他方法成功重写子查询。 请参见第12.2.8.11节“将子查询重写为早期MySQL版本的联接”

我能想到的是添加的表名到您areaID表示在子查询或重命名保留字的东西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 

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

子查询中的多个列使连接混乱。

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

玩得开心!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM