我有这个小的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子句'中的未知列'等级'
但如果我删除第二行,它可以正常工作。我试图做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
答案 0 :(得分:5)
按照以下顺序对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
答案 1 :(得分: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