1

この小さな SQL クエリがあります。

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

これは私にエラーを与えます

1054 - 'where 句' の列 'grade' が不明です

しかし、最後の2行目を削除すると、正常に動作します。テストテーブルに名前を付けて、その名前を成績に追加しようとしまし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
4

2 に答える 2

4

SQL ステートメントは、次の順序である程度評価されます。

  • から
  • どこ
  • 選択する
  • グループ
  • 持っている
  • 注文

そのため、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
于 2009-04-28T10:09:12.483 に答える
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
于 2009-04-28T10:08:04.670 に答える