2010-11-08 155 views
0

我的查询是为什么我不能使用定义变量:WHERE子句中

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

它会导致“#1054 - 未知列‘VAR1’在'where子句”错误。任何人都可以解释为什么会出现这种错误? (我知道工作的SQL,但我想了解失败的原因),它下面

回答

3

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

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

别名的列不能在任何条款除了最后条款“ORDER BY”使用。

+0

不错的答案。但你可以编辑你的其他答案。 – Kamal 2010-11-08 12:50:24

+0

我认为引用的顺序是错误的:'SELECT'子句在'HAVING'和'ORDER BY'之间解析 - 这就是为什么只有'ORDER BY'可以引用列的'AS'子句('别名')。 – onedaywhen 2010-11-08 14:10:00

+0

......实际上,我几乎可以肯定,文章详细说明了“SELECT”子句的格式(即子句必须用代码写入的顺序),而不是执行顺序。查看最后的评论('Martin')。 – onedaywhen 2010-11-08 14:14:47

0

写:

SELECT的报价,(SELECT AVG(报价)FROM project_bids)作为VAR1 FROM project_bids WHERE报价>(SELECT AVG(报价)FROM project_bids)

1

,你将不得不搬家“VAR1”走出where,并把它的having声明

where语句没有获得在SELECT语句创建的列