在SELECT查询中包含DISTINCT是否意味着应该对结果集进行排序?
我不认为它,但我正在寻找一个权威的答案(网络链接).
我有这样的查询:
Select Distinct foo From Bar
在oracle中,结果是截然不同的,但不是按排序顺序排列的.在Jet/MS-Access中,似乎还有一些额外的工作要确保结果是排序的.我假设oracle在这种情况下遵循规范并且MS Access已经超越了.
另外,有没有办法可以给表提示它应该排序foo
(除非另有说明)?
从SQL92规范:
如果指定了DISTINCT,则让TXA成为从TX中消除冗余重复值的结果.否则,让TXA成为TX.
...
4)如果未指定a,则Q行的排序依赖于实现.
最终真正的答案是DISTINCT和ORDER BY是SQL语句的两个独立部分; 如果您没有ORDER BY子句,则不会按照定义对结果进行特定排序.
在许多情况下,Oracle中的DISTINCT并不意味着排序,其中最重要的是10g +中使用的散列算法,用于分组操作和不同操作.
如果需要有序的结果集,请始终指定ORDER BY,即使在9i及更低版本中也是如此.