0

これが私の問題です。大きなプロジェクト内のステートメントがすべて次のようにラップされていることを確認するように求められました。

Select * from (Select ... order by column)

彼らの順序を守ってください。これは疑問を投げかけます.SQL選択結果が順序を維持することを定義する公式ソースはありますか?

このシナリオをグラブ可能な最小限のコンテキストに設定するには、次のようにします。

列 A と列 B を持つ exampleTBL という名前のテーブルがあるとします。次のステートメントを実行します。

Select * from (Select B from exampleTBL order by A);

結果は、使用されたものから独立して、DBMS/Driver/Platform/...A によって順序付けられますか?

4

2 に答える 2

1

SQL-2003 標準(71WD2-02-Foundation-2011-12) から:


4.15.3 派生テーブル

<joined table>派生テーブルは、 、<data change delta table>、、 などの式の評価によって、1 つ以上の他のテーブルから直接的または間接的に派生したテーブル<query expression>です<table expression>。A <query expression>にはオプションの を含めることができます。によって指定されたテーブルの行の順序は、をすぐに含む<query expression>に対してのみ保証されます。<query expression><order by clause>


したがって、DBMS がサブクエリで順序を維持する義務はありません。あなたの例では、次を使用してください:

Select B from (Select B, A from exampleTBL) t order by A;

DBMS が順序を維持しているかどうかに関係なく、このアプローチをお勧めします。

于 2013-03-06T11:37:41.297 に答える
1

いいえ。すべてのデータベースがサブクエリでの順序付けをサポートしているわけではないため、外側のクエリで順序を定義する必要があります (または、外側のクエリを削除することをお勧めします)。また、同じ結果を確実に得たい場合は、選択しているすべての列を順序で含める必要があります。最後に、インデックスが使用されているかどうかにかかわらず、外側の順序は変わりません。

于 2013-03-06T11:09:58.180 に答える