Inner Join返回不同的数据集

时间:2012-08-16 08:16:24

标签: sql

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

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才能获得所需的结果?

3 个答案:

答案 0 :(得分:2)

因为结果中没有固有的顺序。如果订单很重要,请使用ORDER BY子句指定所需的顺序。如果没有,那就不要。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

除非您明确说明订购,否则服务器将以最快速检索的方式返回数据。我认为,从SQL 2000到SQL 2005的升级略有改变。

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