【问题标题】:Why Can't I Use Defined Variable in Where Clause为什么我不能在 Where 子句中使用定义的变量
【发布时间】:2010-11-08 12:38:40
【问题描述】:

我的查询是:

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

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

【问题讨论】:

    标签: mysql sql mysql-error-1054


    【解决方案1】:

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

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

    列的别名不能用于除最后一个子句“ORDER BY”之外的任何子句。

    【讨论】:

    • 不错的答案。但您本可以编辑您的其他答案。
    • 我认为引用的顺序是错误的:SELECT 子句在HAVINGORDER BY 之间解析——这就是为什么只有ORDER BY 可以引用列的AS 子句( '别名')。
    • ...事实上,我几乎可以肯定这篇文章详细说明了SELECT 子句的格式(即子句必须用代码编写的顺序)而不是执行顺序。请参阅最后一条评论(来自“Martin”)。
    • 这里是正确的执行顺序stackoverflow.com/a/3841804/1542774
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如下写:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        • 2016-05-18
        相关资源
        最近更新 更多