2012-06-29 24 views
9

thể trùng lặp:
Why do results from a SQL query not come back in the order I expect?Thứ tự PostgreSQL có được bảo đảm đầy đủ nếu phân loại trên thuộc tính không phải duy nhất không?

Từ đọc 7.5 Sorting Rows và từ những vấn đề tôi đã nhìn thấy với PostgreSQL, ấn tượng của tôi là như sau, nhưng phần đó là không hoàn toàn rõ ràng, vì vậy tôi sẽ hãy biết ơn nếu ai đó có thể xác minh:

SELECT * FROM items; 

không có thứ tự đảm bảo.

SELECT * FROM items ORDER BY published_date ASC; 

đảm bảo rằng hai mục có những ngày khác nhau đi theo một thứ tự nhất định, nhưng không không đảm bảo rằng hai mục có cùng ngày lúc nào cũng theo thứ tự.

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

luôn trả về các mục theo cùng thứ tự vì nó hoàn toàn xác định.

Tôi có quyền này không?

Tôi không hoàn toàn rõ ràng về việc sắp xếp trên một thuộc tính (chẳng hạn như published_date) đảm bảo thứ tự cho các bản ghi có cùng giá trị, như trong ví dụ thứ hai.

+9

Bạn có quyền. Thứ tự duy nhất được đảm bảo là thứ tự mà "ORDER BY" của bạn áp đặt. Nếu có hoán vị có thể * trong * thứ tự đó tất cả có thể là một đầu ra hợp lệ. – wildplasser

+1

Đây là trường hợp cụ thể của câu hỏi: http://stackoverflow.com/questions/10999913/why-do-results-from-a-sql-query-not-come-back-in-the-order-i- mong đợi –

Trả lời

10

Đặt hàng is not guaranteed trừ khi bạn chỉ định rõ ràng điều khoản với điều khoản ORDER BY.

Bạn có thể là nhận dữ liệu theo cùng thứ tự khi thực hiện một số trường hợp không có hoạt động cơ sở dữ liệu, vì PostgreSQL sẽ trả về các hàng theo thứ tự tìm thấy trong các trang cơ sở dữ liệu. Thực hiện một thử nghiệm nhỏ:

  • chèn một số hàng giữ thứ tự mong muốn;
  • truy vấn bảng: bạn sẽ nhận được các hàng được đặt hàng;
  • cập nhật bản ghi đầu tiên trong bộ này;
  • truy vấn lại bảng;
  • quan sát kết quả.

Tóm lại: Bạn có thể thậm chí nhận được hàng theo thứ tự mong muốn, nhưng đây chỉ là một sự trùng hợp.

+0

Một thứ tự cuối cùng nhất quán là ** không ** là trùng hợp ngẫu nhiên, vì đó là do truy cập dữ liệu cơ bản và tổ chức bên trong của nó. Bạn nói đúng, người dùng không thể dựa vào nó, vì nó có thể thay đổi vì những lý do hoàn toàn không liên quan đến ứng dụng, như việc tạo ra một chỉ mục hoặc các tệp cơ sở dữ liệu di chuyển. –

+0

Cảm ơn bạn! Tôi đọc trang hướng dẫn đó (liên kết nó từ câu hỏi), nhưng tôi cảm thấy nó không đủ rõ ràng về trường hợp cụ thể này. –

+0

Cụ thể, "Một thứ tự đầu ra cụ thể chỉ có thể được đảm bảo nếu bước sắp xếp được chọn một cách rõ ràng." Không rõ ràng nếu "bước sắp xếp được chọn một cách rõ ràng" bằng cách đặt hàng trên một cột không phải duy nhất. –

Các vấn đề liên quan