1

此查询给我一个错误 #1054 - 'where 子句'中的未知列 'totalamount'

 SELECT (amount1 + amount2) as totalamount 
 FROM `Donation` 
 WHERE totalamount > 1000

我知道我可以通过使用 group by 子句来解决此错误,并将 where 条件替换为 having 子句。但是除了使用having子句之外还有其他解决方案吗?如果 group by 是唯一的解决方案,那么我想知道为什么我必须使用 group by 子句,即使我没有使用任何聚合函数

谢谢。

4

4 回答 4

3

我不希望 MySQL 会给出该错误消息,但许多其他数据库会给出。在其他数据库中,您可以通过重复列定义来解决它:

SELECT  amount1 + amount2 as totalamount 
FROM    Donation
WHERE   amount1 + amount2 > 1000

或者您可以使用子查询来避免重复:

SELECT  totalamount 
FROM    (
        select  amount1 + amount2 as totalamount
        ,       *
        from    Donation
        ) as SubQueryAlias
WHERE   totalamount  > 1000

SQL Fiddle 上的实时示例。

于 2012-06-23T15:02:10.120 回答
1

没门。

WHERE过滤列,而HAVING过滤聚合。

SQL 有

于 2012-06-23T14:58:46.753 回答
1

根据 SQL 方言,您不能将派生列放在 where 子句中。

而是使用这个 where 子句。

WHERE (amount1 + amount2) > 1000
于 2012-06-23T15:03:25.310 回答
1

我建议您使用 Andomar 答案中的一种变体。

MySQL 允许的是这个(不要使用它,它不是标准的,几乎任何其他 DBMS 都不允许它):

SELECT (amount1 + amount2) AS totalamount 
  FROM Donation 
  HAVING totalamount > 1000 ;
于 2012-06-23T15:11:07.457 回答