0

我的查询是:

SELECT 
  offer, 
  (SELECT 
        AVG(offer) 
   FROM 
        project_bids
  ) as var1 
FROM 
  `project_bids` 
WHERE 
  offer > var1

它会导致“#1054 - 'where 子句'中的未知列 'var1'”错误。任何人都可以解释为什么会出现这个错误吗?(我知道工作 sql,但我想知道它为什么会失败)

4

3 回答 3

2

这里提到了 SELECT 语句的子句的执行顺序:

http://blog.sqlauthority.com/2007/06/14/sql-server-easy-sequence-of-select-from-join-where-group-by-having-order-by/

除最后一个子句“ORDER BY”外,不能在任何子句中使用列的别名。

于 2010-11-08T12:48:49.000 回答
1

您必须将“var1”移出where并将其放入having语句中

where语句无权访问在 select 语句中创建的列

于 2010-11-08T12:43:52.767 回答
0

写如下:

选择报价,(SELECT AVG(offer) FROM project_bids) as var1 FROM project_bidsWHERE offer > (SELECT AVG(offer) FROM project_bids)

于 2010-11-08T12:42:58.633 回答