【发布时间】:2018-02-18 22:27:11
【问题描述】:
我正在阅读a documentation for postgreSQL SELECT statement,因为我想查找 SELECT 中的 SQL 语句的处理顺序。
在文档中它说:
SELECT 从零个或多个表中检索行。 SELECT的一般处理如下:(...)
- (...) SELECT DISTINCT ON 消除与所有指定表达式匹配的行。 (...)
- 如果指定了 ORDER BY 子句,则返回的行按指定的顺序排序。 (...)
它进一步说(DISTINCT clause description):
DISTINCT ON 表达式的解释规则与 ORDER BY(见上文)。请注意,每组的“第一行”是 不可预测,除非使用 ORDER BY 来确保所需的行 首先出现。 (...)
DISTINCT ON 表达式必须匹配最左边的 ORDER BY 表达式。 ORDER BY 子句通常包含额外的表达式,用于确定每个 DISTINCT ON 组中行的所需优先级。
我的自然期望是 ORDER BY 应该修改 DISTINCT ON 的结果,并且由于 DISTINCT ON 可能(并且可能会)给出不可预测的结果,所以它 - 简单地说 - 无用,如果没有在另一个 SELECT 查询之前。
SELECT语句中语句的实际执行顺序是什么?
特别是:为什么ORDER BY在DISTINCT ON之前处理?
我不是 postgreSQL 和 SQL 的经验丰富的用户,因此我不知道我是否在问正确的问题 (XY Problem)。如果您认为这个问题应该是“DISTINCT ON 究竟是如何工作的?”或者甚至可能是“关键字在 SELECT 语句中的位置重要吗?”或其他任何问题,请适当地编辑问题。
【问题讨论】:
标签: sql postgresql select