【发布时间】:2017-03-02 16:59:02
【问题描述】:
以下查询可以正常工作:
SELECT a, b, c,
(SELECT COUNT(*) AS COUNT FROM table_b WHERE field_a = p.a) AS d
FROM table_a AS p
ORDER BY b DESC
这也有效:
SELECT a, b, c,
(SELECT COUNT(*) AS COUNT FROM table_b WHERE field_a = p.a) AS d
FROM table_a AS p
ORDER BY d DESC
但以下会产生ERROR; column 'd' does not exist 错误:
SELECT a, b, c,
(SELECT COUNT(*) AS COUNT FROM table_b WHERE field_a = p.a) AS d
FROM table_a AS p
ORDER BY (b * d) DESC
上述三个查询之间的唯一区别是ORDER BY 子句。在前两个查询中,结果按b 字段或动态d 字段排序。在最后一个查询中,结果(应该)按b 乘以d 的乘积排序。
为什么在最后一个查询中,PostgreSQL 说d 不存在,而在第二个查询中却可以毫无问题地找到它?
【问题讨论】: