从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行"
如果错误可以被识别,我会很感激,因为我已经搜索了答案,但这个查询超出了我的范围。
提前致谢
答案 0 :(得分:3)
SQL_CACHE
和SQL_NO_CACHE
:
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语句。