1

假设,我有如下 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 个或更多字符的所有国家/地区。

在按降序排序后,我只想检索表中对应的前 5 个州的长度为 5 个或更多字符的国家/地区。state

在这种情况下,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

有没有办法解决这种情况?

4

1 回答 1

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 也不会)

于 2012-11-05T18:14:04.837 回答