【问题标题】:Why does postgres tell me column 'airline' doesn't exist when I know it does?当我知道它存在时,为什么 postgres 告诉我列“航空公司”不存在?
【发布时间】:2022-01-23 14:03:57
【问题描述】:

我正在尝试对来自 PostgreSQL 课程的查询进行这种简单的修改。原来的工作正常,如下:

SELECT  fl_date
        ,mkt_carrier AS airline
        ,mkt_carrier_fl_num AS flight
        ,origin
        ,dest
  FROM  performance
 WHERE  dest = 'ORD'

result

现在我要求只显示某个airline,而不是destination

SELECT  fl_date
        ,mkt_carrier AS airline
        ,mkt_carrier_fl_num AS flight
        ,origin
        ,dest
  FROM  performance
 WHERE  airline = 'UA'

..但它没有给出结果,而是返回以下内容:

ERROR:  column "airline" does not exist
LINE 7:  WHERE  airline = 'UA'
                ^
SQL state: 42703
Character: 145

显然这个栏目确实存在;我在初始结果集中看到它。我错过了什么?

【问题讨论】:

  • 在使用 PostgreSQL 时不能在条件中使用别名。您需要使用真实的参考资料。
  • 该列不存在的原因是where 子句被处理之前特定的选择列及其别名被确定。因此,从 Postgres 的角度来看,列 airline 在处理 where 子句时不存在。所以很明显这个栏目不存在;

标签: postgresql


【解决方案1】:

因为您不能在WHEREGROUP BY 中使用列别名。您必须在WHERE中使用真实的参考名称

SELECT  fl_date
        ,mkt_carrier AS airline
        ,mkt_carrier_fl_num AS flight
        ,origin
        ,dest
  FROM  performance
 WHERE  mkt_carrier = 'UA'

【讨论】:

    【解决方案2】:

    您不能使用 where、group by、... 子句别名。使用真实的列名

    SELECT  fl_date
            ,mkt_carrier AS airline
            ,mkt_carrier_fl_num AS flight
            ,origin
            ,dest
      FROM  performance
     WHERE  mkt_carrier = 'UA'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 2014-05-01
      • 2011-03-07
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多