以下查询在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中不允许连接到子查询?那意味着我必须用临时表做这个吗?
提前致谢!
答案 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计数”
子查询中的多个列搞乱了连接。
临时表应该可以正常工作....
玩得开心!