WHERE子句中的引用别名

时间:2016-06-06 05:43:31

标签: sql postgresql

在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子句中引用别名?

2 个答案:

答案 0 :(得分:7)

这是不可能的,因为在sql中,执行的顺序是第一个,where子句然后是select。在where子句执行的时候,它不知道你定义的别名是什么,所以你会得到那个错误。

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

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

答案 1 :(得分:4)

试试这种方式

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