0

当我写下面的查询时,它返回所有时间不同的集合。

SELECT title, content FROM Stack 
INNER JOIN Overflow ON Stack.OverflowId = Overflow.Id 

例如;

期望的结果:

title    content
_____    _______
 a     -    c1
 b     -    c2
 c     -    c3
 d     -    c4
 e     -    c5
 f     -    c6
 g     -    c7

第一次运行:

title    content
_____    _______
 g     -    c7
 d     -    c4
 c     -    c3
 b     -    c2
 f     -    c6
 e     -    c5
 a     -    c1

第二次运行:

title    content 
_____    _______
 d     -    c4
 a     -    c1
 f     -    c6
 b     -    c2
 g     -    c7
 e     -    c5
 c     -    c3

这对我来说很有趣。你知道原因吗?

当我使用下面的查询时,它是好的。

SELECT title, content FROM Stack 
INNER JOIN Overflow ON Stack.OverflowId = Overflow.Id 
ORDER BY Stack.Id

但问题是

为什么我需要ORDER BY得到想要的结果?

4

3 回答 3

2

因为结果没有内在的顺序。如果顺序很重要,请使用该ORDER BY子句指定您想要的顺序。如果没有,那就不要。

于 2012-08-16T08:20:07.957 回答
2

如果没有 ORDER BY,您就无法期待可预测的订单。没有它,您将无法控制返回行的顺序。原因在于如何指定 SQL 语言。

于 2012-08-16T08:20:25.530 回答
2

除非您明确说明顺序,否则服务器将以最快检索的方式返回数据。我相信这在从 SQL 2000 升级到 SQL 2005 时略有变化。

这里有一篇关于详细来龙去脉的有趣文章:http: //blogs.msdn.com/b/queryoptteam/archive/2006/05/02/588731.aspx

于 2012-08-16T08:21:03.570 回答