我正在尝试运行这样的查询
SELECT a, b , c, (SELECT INNULL(x,y)) as mycol WHERE mycol < 400 ;
但是它给出了错误
#1054 - Unknown column 'mycol' in 'where clause'
这样做的正确方法是什么?
谢谢。
我正在尝试运行这样的查询
SELECT a, b , c, (SELECT INNULL(x,y)) as mycol WHERE mycol < 400 ;
但是它给出了错误
#1054 - Unknown column 'mycol' in 'where clause'
这样做的正确方法是什么?
谢谢。
在MS SQL中是如此,所以我假设在MySQL中也存在同样的问题。
尝试将WHERE更改为HAVING。WHERE子句看不到您重命名的列。
HAVING的工作方式与 WHERE 相同,例如 (mycol < 400 AND a > 5)。
GROUP BY应该在HAVING之前。
检查链接中的示例。
@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
.