Почему я могу отсортировать встроенное значение SELECT, но не использовать его в предложении WHERE? - PullRequest
1 голос
/ 28 апреля 2009

У меня небольшой запрос 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 - Неизвестный столбец 'оценка' в 'предложении'

Но если я уберу 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

Ответы [ 2 ]

5 голосов
/ 28 апреля 2009

Sql операторы несколько оцениваются в следующем порядке:

  • FROM
  • ГДЕ
  • SELECT
  • GROUP
  • HAVING
  • ЗАКАЗ

То есть то, что вы определяете в предложении 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 голосов
/ 28 апреля 2009
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...