【问题标题】:Reference alias in WHERE clauseWHERE 子句中的引用别名
【发布时间】:2016-06-06 05:43:30
【问题描述】:

在 psql 中,尝试在 WHERE 子句中引用别名:

SELECT
    SUBSTRING(pk, 6, 2)::INT AS _year
FROM
    listing
WHERE
    _year > 90

导致错误:

ERROR:  column "_year" does not exist
LINE 1: ...STRING (pk, 6, 2)::INT AS _year FROM listing WHERE _year > 90...
                                                              ^
********** Error **********

ERROR: column "_year" does not exist

是否可以在WHERE 子句中引用别名?

【问题讨论】:

  • 真正的问题是:为什么要将年份隐藏在 varchar 列中?
  • 是别人存的(其实是pk的标识号)
  • 将多条信息放在一个列中更糟糕。 PK 不应该包含这样的内容
  • 感谢您的提示(这对我来说真的很有用,因为我也在问自己同样的问题),但恐怕我没有权限对 db.xml 进行任何更改。也许它不适合这样的查询

标签: sql postgresql


【解决方案1】:

这在sql中是不可能的,执行顺序是先,where子句,后select。在执行 where 子句时,它不知道您定义的别名是什么,因此您将收到该错误。

你需要像这样重写你的查询..

SELECT
    SUBSTRING(pk, 6, 2)::INT AS _year
FROM
    listing
WHERE
SUBSTRING(pk, 6, 2)::INT > 90

【讨论】:

  • 啊,这是 sql 基础知识...谢谢。
【解决方案2】:

试试这个方法

select * from (SELECT
    SUBSTRING(pk, 6, 2)::INT AS _year
FROM
    listing) a where _year>90

【讨论】:

    猜你喜欢
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多