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

2回目の実行:

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

これは私にとって興味深い現実です。理由を知っていますか?

以下のクエリを使用するとOKです。

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

順序を具体的に指定しない限り、サーバーは最も迅速に取得する方法でデータを返します。これは、SQL2000からSQL2005へのアップグレードでわずかに変更されたと思います。

詳細なインとアウトについての興味深い記事がここにあります:http://blogs.msdn.com/b/queryoptteam/archive/2006/05/02/588731.aspx

于 2012-08-16T08:21:03.570 に答える