21

重複の可能性:
SQL クエリの結果が期待どおりの順序で返されないのはなぜですか?

7.5 Sorting Rowsを読んで PostgreSQL で見た問題から、私の印象は次のとおりですが、そのセクションは完全に明示的ではないため、誰かが確認できるとありがたいです:

SELECT * FROM items;

順序は保証されていません。

SELECT * FROM items ORDER BY published_date ASC;

は、日付の異なる 2 つのアイテムが特定の順序で来ることを保証しますが、同じ日付の 2 つのアイテムが常に同じ順序で来ることを保証しません。

SELECT * FROM items ORDER BY published_date ASC, id ASC;

完全に決定論的であるため、常に同じ順序でアイテムを返します。

私はこれの権利を持っていますか?

published_date2 番目の例のように、1 つの属性 ( など) で並べ替えると、同じ値を持つレコードの順序が保証されるかどうかはよくわかりません。

4

1 に答える 1

15

句で明示的に指定しない限り、順序は保証されません。ORDER BY

PostgreSQLはデータベースページで見つかった順序で行を返すだけなので、データベースアクティビティがない場合は、複数の実行で同じ順序でデータを取得する可能性があります。小さなテストを行います。

  • 希望の順序を維持しながら、いくつかの行を挿入します。
  • テーブルをクエリします。行が順序付けられます。
  • セットの最初のレコードを更新します。
  • テーブルを再度クエリします。
  • 結果を観察します。

要するに:あなたは希望する順序で行を取得しているかもしれませんが、これは単なる偶然です。

于 2012-06-29T14:45:32.767 に答える