在mysql中有一个子查询结果的条件

时间:2010-05-13 07:06:17

标签: mysql sql subquery mysql-error-1054 ifnull

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

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

BUt it给出错误

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

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

感谢。

2 个答案:

答案 0 :(得分:3)

MS SQL 中就是这样,所以我认为,同样的问题出现在 MySQL 中。

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

HAVING 的工作方式与WHERE相同,例如(mycol&lt; 400 AND a&gt; 5)。

GROUP BY 应该在 HAVING 之前。

检查链接中的示例。

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

答案 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