Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL / MariaDB - sắp xếp theo truy vấn con bên trong

Sau khi đào sâu một chút, tôi có thể xác nhận cả hai tình huống của bạn:

MySQL 5.1 có áp dụng ORDER BY bên trong truy vấn con.

MariaDB 5.5.39 trên Linux thì không áp dụng ORDER BY bên trong truy vấn con khi không có LIMIT được cung cấp. Nó không tuy nhiên, hãy áp dụng đúng đơn đặt hàng khi LIMIT tương ứng được đưa ra:

SELECT t2.Code 
FROM (
  SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2
) AS t2;

Không có LIMIT đó , không có lý do chính đáng để áp dụng kiểu sắp xếp bên trong truy vấn con. Nó có thể được áp dụng tương đương cho truy vấn bên ngoài.

Hành vi được ghi lại:

Hóa ra, MariaDB đã ghi lại hành vi này và nó không được coi là một lỗi:

Một "bảng" (và truy vấn con trong FROM cũng vậy) là - theo tiêu chuẩn SQL - một tập hợp các hàng không có thứ tự. Các hàng trong bảng (hoặc trong một truy vấn con trong FROM mệnh đề) không đi theo bất kỳ thứ tự cụ thể nào. Đó là lý do tại sao trình tối ưu hóa có thể bỏ qua ORDER BY mệnh đề mà bạn đã chỉ định. Trên thực tế, tiêu chuẩn SQL thậm chí không cho phép ORDER BY mệnh đề xuất hiện trong truy vấn con này (chúng tôi cho phép nó, bởi vì ORDER BY ... LIMIT ... thay đổi kết quả, tập hợp các hàng, không chỉ thứ tự của chúng).

Bạn cần xử lý truy vấn con trong FROM , dưới dạng một tập hợp các hàng theo một số thứ tự không xác định và không xác định, và đặt ORDER BY trên SELECT cấp cao nhất .

Vì vậy, MariaDB cũng khuyên bạn nên áp dụng ORDER BY trong truy vấn ngoài cùng hoặc LIMIT nếu cần thiết.

Lưu ý:Tôi hiện không có quyền truy cập vào MySQL 5.5 hoặc 5.6 thích hợp để xác nhận xem hành vi có giống nhau ở đó hay không (và SQLFiddle.com đang hoạt động sai). Nhận xét về báo cáo lỗi ban đầu (đóng lại là không phải lỗi) gợi ý rằng MySQL 5.6 có thể hoạt động giống như MariaDB.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng khóa chính tổng hợp làm khóa ngoại

  2. Hướng dẫn thiết kế cơ sở dữ liệu để quản lý blog trong MySQL

  3. Chèn Blobs vào cơ sở dữ liệu MySql bằng php

  4. Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/var/mysql/mysql.sock' (38)

  5. Kết nối MySQL qua đường hầm SSH - làm thế nào để chỉ định máy chủ MySQL khác?