2009-04-28 5 views
1

私はこの小さなSQLクエリを持っています。 '節'なぜ私はインラインSELECT値をソートできますが、WHERE句でそれを使用できませんか?

に不明な列 'グレード' しかし、私は2番目の最後の行を削除した場合、それが正常に動作します - これは私にエラー

1054を与える

SELECT a.`id` , a.`title` , a.`date` , 
(
    SELECT MAX(grade) 
    FROM tests 
    WHERE userid = 41 
    AND presid = a.`id` 
) AS grade 
FROM `presentations` a 
WHERE a.`visible` = 1 
AND `grade` >= 5 
ORDER BY `grade` DESC 

。私はAND a.gradeをやろうとしましたが、テストテーブルに名前を付けて、その名前をグレードに付け加えましたが、まだ運がありません。

WHERE句でこのインラインクエリを使用するにはどうすればよいですか?

私はこれが機能することを発見しましたが、それは唯一の方法ですか?

SELECT a.`id` , a.`title` , a.`date` , 
(
    SELECT MAX(grade) 
    FROM tests 
    WHERE userid = 41 
    AND presid = a.`id` 
) AS grade 
FROM `presentations` a 
WHERE a.`visible` = 1 
AND (
    SELECT MAX(grade) 
    FROM tests 
    WHERE userid = 41 
    AND presid = a.`id` 
) >= 5 
ORDER BY `grade` DESC 

答えて

5

SQL文は幾分次の順序で評価される:

  • FROM

    • Oを有する
    • GROUP
    • を選択RDER

    したがって、SELECT句で定義するものはWHERE句では使用できません。その制約をHAVING節に入れる必要があります:

    SELECT a.`id` , a.`title` , a.`date` , 
    (
        SELECT MAX(grade) 
        FROM tests 
        WHERE userid = 41 
        AND presid = a.`id` 
    ) AS grade 
    FROM `presentations` a 
    WHERE a.`visible` = 1 
    HAVING `grade` >= 5 
    ORDER BY `grade` DESC 
    
  • +0

    ありがとう –

    0
    SELECT a.`id` , a.`title` , a.`date` , 
         (
         SELECT MAX(grade) 
         FROM tests 
         WHERE userid = 41 
           AND presid = a.`id` 
         ) AS grade 
    FROM `presentations` a 
    WHERE a.`visible` = 1 
    HAVING `grade` >= 5 
    ORDER BY 
         `grade` DESC 
    
    関連する問題