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 つstateの州が 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 を使用しています

この状況を回避する方法はありますか?

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 に答える