MySql中的LIMIT子句似乎不适用于IN()子查询

时间:2012-11-05 18:11:51

标签: mysql subquery limit

假设我有如下的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

有办法解决这种情况吗?

1 个答案:

答案 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

Here is a demonstration

(是的,我知道加拿大人不称他们为“国家”,当然GBR也不称他们为“