我正在尝试运行像这样的查询
SELECT a, b , c, (SELECT INNULL(x,y)) as mycol WHERE mycol < 400 ;
BUt it给出错误
#1054 - Unknown column 'mycol' in 'where clause'
这样做的正确方法是什么?
感谢。
答案 0 :(得分:3)
在 MS SQL 中就是这样,所以我认为,同样的问题出现在 MySQL 中。
尝试将 WHERE 更改为 HAVING 。 WHERE 子句看不到您重命名的列。
HAVING 的工作方式与WHERE相同,例如(mycol&lt; 400 AND a&gt; 5)。
GROUP BY 应该在 HAVING 之前。
检查链接中的示例。
答案 1 :(得分:0)
@hgulyan我怀疑你的回答。重命名不是阻止使用WHERE
子句,而是使用子查询。所以我想说我有一个问题:
SELECT id as ID FROM user WHERE ID > 10;
这将完美无缺。
现在假设我还有一个问题:
SELECT name, (SELECT id FROM user_detail WHERE user_id = 20) as ID FROM user WHERE ID > 19;
此特定查询将产生错误:
未知列ID
因此,它是关于使用子查询和列别名而不仅仅是列别名。
因此,在这种情况下,您必须使用HAVING
而不是WHERE
。