在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
答案 0 :(得分:5)
尽管distinct
的典型实现是使用某种有序数据结构完成的,但它使用的顺序可能不是您需要的顺序。
有:
distinct
子句并不意味着排序。因此,如果您需要以特定方式订购的数据,则必须在查询中添加order by
子句。
另请注意,可以使用的数据结构之一是哈希表/哈希集,虽然这些数据结构可能会产生看起来有序的数据,如果只有少量值放入其中,数量较大的数据会崩溃, 无论如何,这是特定于实现且未记录的。不要依赖任何此类行为。
答案 1 :(得分:1)
DISTINCT 子句与订购记录无关。您必须明确使用 ORDER BY 子句进行排序。
select distinct id
from #MyTable
Order By id