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

Sắp xếp Nulls cuối cùng

Bạn đúng. Không có lý do gì mà tôi có thể hiểu được, MySQL chấp nhận ORDER BY không rõ ràng miễn là tên bạn cung cấp không được xử lý theo bất kỳ cách nào (không có cách nào mà tôi có thể nghĩ ra. Có thể những người khác tồn tại).

Ngay sau đó, sự không rõ ràng sẽ bị từ chối.

Điều này được chấp nhận (và thừa):

select b.id, a.name as name
    FROM client AS a JOIN client AS b ON (a.id = b.id)
    ORDER BY name, name;

while COALESCE(name, '') , name IS NULL , name OR NULL tất cả đều bị từ chối.

Giải pháp rõ ràng là sử dụng một tên khác cho bí danh, một tên không xuất hiện trong cả hai bảng.

Một khả năng khác là tạo một truy vấn lồng nhau:

SELECT * FROM ( your query here, without ORDER ) AS original
ORDER BY IF($sortcol is NULL,1,0), $sortcol;

Đó là:

$sortcol="boat";
$sql = <<<SQL
   SELECT * FROM (
      SELECT fleet,b.boat as boat,owner FROM boats as b 
         LEFT JOIN owners as o ON  b.boat=o.boat 
   ) AS original
   ORDER BY IF($sortcol is NULL,1,0), $sortcol;
SQL;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về TIMESTAMP () - MySQL

  2. LỖI 1045 (28000):Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu:KHÔNG)

  3. cách sử dụng LIKE với tên cột

  4. Nhóm MySQL theo các giá trị liên tiếp

  5. Sao chép giữa SQL Server và MYSQL