升级后的MySQL语法错误

时间:2014-06-20 04:47:36

标签: mysql syntax mysql-5.5 mysql-5.1

从MySQL 5.1到5.5更新 - 一切都很好。我知道差异和网站接受了升级,除了一个。

但查询对我来说太复杂了,看不出有什么问题......

以下是5.1中的工作

SELECT DISTINCT SQL_CACHE *
FROM Regions
WHERE (region_id IN
         (SELECT SQL_CACHE included_region_id AS region_id
          FROM Contains_areas
          WHERE region_id =
              (SELECT toplevel_region_id AS region_id
               FROM Sites
               WHERE site_url = 'http://www.domainname.com/' LIMIT 1))
       OR (region_id =
             (SELECT toplevel_region_id AS region_id
              FROM Sites
              WHERE site_url = 'http://www.domainname.com/' LIMIT 1))
       AND user_id='1')
ORDER BY region ASC

但在5.5中,错误是

"您的SQL语法出错了;查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在< AS Region_id FROM Contains_areas WHERE region_id IN附近使用(SELE'在第26行"

如果错误可以被识别,我会很感激,因为我已经搜索了答案,但这个查询超出了我的范围。

提前致谢

1 个答案:

答案 0 :(得分:3)

MySQL 5.5.3中不再允许子查询中的

SQL_CACHESQL_NO_CACHE

Oracle link

  

SQL_CACHE和SQL_NO_CACHE选项会影响查询结果的缓存   在查询缓存中(请参见第8.9.3节“MySQL查询缓存”)。   SQL_CACHE告诉MySQL将结果存储在查询缓存中(如果是)   可缓存的,query_cache_type系统变量的值为2   或需求。使用SQL_NO_CACHE,服务器不使用查询缓存。   它既不检查查询缓存,也不检查结果是否已经存在   缓存,也不缓存查询结果。 (由于受到限制   在解析器中,空格字符必须位于SQL_NO_CACHE之前和之后   关键词;诸如换行符之类的非空间会导致服务器检查   查询缓存以查看结果是否已缓存。)

     

对于视图,SQL_NO_CACHE适用于它出现在任何SELECT中的情况   查询。对于可缓存的查询,SQL_CACHE适用于它出现在   首先选择查询引用的视图。

     

从MySQL 5.5.3开始,这两个选项是互斥的   如果同时指定它们,则会发生错误。 此外,这些选项不是   子查询中允许(包括FROM子句中的子查询),以及   除第一个SELECT之外的联合中的SELECT语句。

相关问题