当我知道它存在时,为啥 postgres 告诉我列“航空公司”不存在?
Posted
技术标签:
【中文标题】当我知道它存在时,为啥 postgres 告诉我列“航空公司”不存在?【英文标题】: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 子句时不存在。所以很明显这个栏目不存在;
【参考方案1】:
因为您不能在WHERE
或GROUP 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'
【讨论】:
以上是关于当我知道它存在时,为啥 postgres 告诉我列“航空公司”不存在?的主要内容,如果未能解决你的问题,请参考以下文章
为啥当我明确告诉 Eclipse 使用特定的 JDK 运行时,它使用特定的 JRE 运行?
为啥 Microsoft Graph API 告诉我我刚刚创建的事件仍然存在时被“@removed”?
为啥在我的 Postgres 函数中使用 IF 语句时出现语法错误?
类型“RelayObservable<unknown>”上不存在属性“then”。当我尝试在反应中使用中继获取数据时。我不知道为啥会出现这个错误