在SQL Server中使用distinct子句

时间:2014-02-12 13:15:08

标签: sql-server

在SQL Server 2008中,使用distinct子句总是执行隐式顺序,或者我需要为此指定顺序?我想确保按顺序使用不同的放置数据。

这里有一个例子,不同的是按照

进行排序
create table #MyTable (id int)

insert into #MyTable values (3)
insert into #MyTable values (2)
insert into #MyTable values (8)

select distinct id from #MyTable

2 个答案:

答案 0 :(得分:5)

尽管distinct的典型实现是使用某种有序数据结构完成的,但它使用的顺序可能不是您需要的顺序。

有:

  • 不保证数据将以任何方式订购
  • 不保证以后/明天对相同数据的相同查询将以相同(任意)顺序返回数据
  • 不保证观察到的顺序是一致的

distinct子句并不意味着排序。因此,如果您需要以特定方式订购的数据,则必须在查询中添加order by子句。

另请注意,可以使用的数据结构之一是哈希表/哈希集,虽然这些数据结构可能会产生看起来有序的数据,如果只有少量值放入其中,数量较大的数据会崩溃, 无论如何,这是特定于实现且未记录的。不要依赖任何此类行为。

答案 1 :(得分:1)

DISTINCT 子句与订购记录无关。您必须明确使用 ORDER BY 子句进行排序。

select distinct id 
from #MyTable
Order By id