2

我正在尝试运行这样的查询

SELECT a, b , c, (SELECT INNULL(x,y)) as mycol WHERE mycol < 400 ;

但是它给出了错误

#1054 - Unknown column 'mycol' in 'where clause'

这样做的正确方法是什么?

谢谢。

4

2 回答 2

3

MS SQL中是如此,所以我假设在MySQL中也存在同样的问题。

尝试将WHERE更改为HAVINGWHERE子句看不到您重命名的列。

HAVING的工作方式与 WHERE 相同,例如 (mycol < 400 AND a > 5)。

GROUP BY应该在HAVING之前。

检查链接中的示例。

http://www.databasejournal.com/features/mysql/article.php/3469351/The-HAVING-and-GROUP-BY-SQL-clauses.htm

于 2010-05-13T07:10:06.710 回答
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.

于 2016-10-12T06:29:10.187 回答