假设我有如下的SQL语句。
SELECT country_id, country_name
FROM country
WHERE country_id
IN(SELECT country_id FROM state
WHERE LENGTH(state_name)>=5
ORDER BY LENGTH(state_name) DESC);
使用指定的子查询从country
表中获取state
表中相应状态名称长度超过5个或更多字符的所有国家/地区。
我想只检索那些在state
表中相应的前5个州在按降序排序后有5个或更多字符的国家/地区。
在这种情况下,带有子查询的LIMIT
子句似乎不起作用,并且以下查询无法工作。
SELECT country_id, country_name
FROM country
WHERE country_id
IN(SELECT country_id FROM state
WHERE LENGTH(state_name)>=5
ORDER BY LENGTH(state_name) DESC
LIMIT 5);
子查询使用的LIMIT
子句导致错误指定如下。
此版本的MySQL尚不支持'LIMIT& IN / ALL / ANY / SOME 子查询'
我正在使用MySql版本5.1.48
有办法解决这种情况吗?
答案 0 :(得分:3)
您需要使用IN()
替换相同子查询的INNER JOIN
子句。如错误消息所示,LIMIT
子查询中不支持IN()
。
SELECT
country.country_id,
country.country_name
FROM
country
/* JOIN the main `country` table against a subquery that retrieves the limited country_id set */
INNER JOIN (
SELECT country_id
FROM state
WHERE LENGTH(state_name)>=5
ORDER BY LENGTH(state_name) DESC
LIMIT 5
) subq ON country.country_id = subq.country_id
(是的,我知道加拿大人不称他们为“国家”,当然GBR也不称他们为“