选择Distinct而不排序

时间:2010-12-07 19:46:39

标签: sql ms-access distinct

我使用了Select Distinct查询,这导致了一个排序数据。反正我有没有得到数据排序?

3 个答案:

答案 0 :(得分:10)

我会尝试详细说明发生了什么以及为什么......虽然我同意@ vic对这个问题的评论......

  • 如果没有明确说明订单(通过order by子句),绝对不能保证结果集中的任何订单。
  • 实际上,许多查询会根据查询计划以及数据的实际存储和访问方式返回一致的顺序......不要依赖于此!
  • 具体来说,对于distinct查询,sql引擎会对数据进行排序,以便确保删除任何重复数据。

简而言之,如果结果集的顺序很重要(即使所需的顺序是“随机”),您必须始终明确说明它。也就是说,从纯粹基于集合的数学/ sql的角度来看,结果的顺序无关紧要。

答案 1 :(得分:2)

将此信息放在查询的末尾。这将有效地随机化结果,然后您将看起来未排序;)

ORDER BY Rnd([ID]);

ID替换为表的主键。在Access SQL中,可以直接调用某些VB函数。在这种情况下,可以在查询中调用Rnd函数,并从正在排序的数据中提供种子值。

答案 2 :(得分:0)

我认为排序可能与确定DISTINCT的方式有关。 返回不同值的最简单方法是对选择集进行排序 通过处理SQL谓词然后返回 仅返回DISTINCT列从前一行更改值的行。

简而言之, DISTINCT要求在删除重复行的情况下执行排序。

也就是说,无法保证在任何特定情况下都会向您返回行 订单除非您明确包含ORDER BY子句。