2017-08-04 14 views
1

MySQLのサブクエリ内にLIMITを使用しようとしていますが、クエリを実行するたびに[42000][1235] This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME sub query'エラーが発生します。サブクエリの制限を使用

サブクエリから返された最初の20 IDだけを取得しようとしています。

SELECT c.collection_name, t.raw 
FROM collections c 
    JOIN member_of_collection m 
    ON c.collection_id = m.collection_id 
    JOIN citations t 
    ON m.citation_id = t.citation_id 
WHERE m.collection_id IN 
    (
    SELECT count(*) FROM collections c 
     JOIN member_of_collection m 
     ON c.collection_id = m.collection_id 
     JOIN citations t 
     ON t.citation_id = m.citation_id 
    WHERE length(trim(t.raw)) > 0 
      AND RIGHT(c.collection_name, length(c.collection_name) - 4) IN (SELECT cat_name from cats_cat) 
      AND left(t.raw, 3) != '–––' 
    GROUP BY c.collection_name 
    ORDER BY count(*) desc 
    LIMIT 20 
); 
+0

「リミット20」はサブクエリの必要があります。 –

+0

なぜ 'collection_id'と' count(*) 'の値を比較していますか? –

答えて

1

あなただけjoinを使用することができます。

SELECT c.collection_name, t.raw 
FROM collections c JOIN 
    member_of_collection m 
    ON c.collection_id = m.collection_id JOIn 
    citations t 
    ON m.citation_id = t.citation_id JOIN 
    (SELECT c.collection_id, count(*) 
     FROM collections c JOIN 
      member_of_collection m 
      ON c.collection_id = m.collection_id JOIN 
      citations t 
      ON t.citation_id = m.citation_id 
     WHERE length(trim(t.raw)) > 0 AND 
      RIGHT(c.collection_name, length(c.collection_name) - 4) IN (SELECT cat_name from cats_cat) 
      AND left(t.raw, 3) != '–––' 
     GROUP BY c.collection_id 
     ORDER BY count(*) desc 
     LIMIT 20 
    ) cc 
    ON m.collection_id = cc.collection_id; 

これは仮定のカップルになり:

  • あなたは本当にcollection_id、ない数にcollection_idを比較したいが。
  • コレクション名とコレクションIDでグループ化することは同じことです。
+0

これらの仮定は正しいです。私はタイプミスをしました。 これで解決しました。 ありがとうございます。 – hello

関連する問題