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

Kho lưu trữ - sắp xếp theo truy vấn gốc không hoạt động

Nếu đó là một câu lệnh đã soạn sẵn và đó là một giá trị ràng buộc được cung cấp trong ORDER BY mệnh đề đó hợp lệ, NHƯNG ...

Giá trị liên kết được cung cấp sẽ không được hiểu là văn bản SQL. Có nghĩa là, giá trị sẽ được xem chỉ là một giá trị (giống như một chuỗi ký tự). Nó sẽ không được xem là tên cột hoặc ASC hoặc DESC từ khóa.

Trong ngữ cảnh của câu lệnh, cung cấp giá trị cho :orderClause ràng buộc trình giữ chỗ, điều đó sẽ có tác dụng tương tự như thể bạn đã viết ORDER BY 'some literal' .

Và điều đó không thực sự thực hiện bất kỳ thứ tự nào của các hàng.

(Điều này ít nhất đúng trong mọi thư viện máy khách SQL mà tôi đã sử dụng với DB2, Teradata, Oracle, SQL Server, MySQL và MariaDB (JDBC, Perl DBI, ODBC, Pro / C, v.v.)

(MyBatis cung cấp một cơ chế thuận tiện để thực hiện thay thế biến trong văn bản SQL, thay đổi động văn bản SQL trước khi nó được chuẩn bị, nhưng những thay thế đó được xử lý TRƯỚC khi câu lệnh được chuẩn bị và không biến thành trình giữ chỗ ràng buộc trong câu lệnh.)

Có thể nhận được một số mô thức của thứ tự "động" với một số biểu thức được tạo cẩn thận trong mệnh đề ORDER BY. Ví dụ:chúng ta có thể có văn bản SQL tĩnh của chúng ta giống như sau:

  ORDER BY CASE WHEN :sort_param = 'name ASC'  THEN activation_name END ASC
         , CASE WHEN :sort_param = 'name DESC' THEN activation_name END DESC

(Văn bản SQL ở đây không phải là động, nó thực sự tĩnh, giống như thể chúng ta đã viết.

 ORDER BY expr1 ASC
        , expr1 DESC

"Bí quyết" là các biểu thức trong mệnh đề ORDER BY có điều kiện trả về giá trị của một số cột từ mỗi hàng hoặc chúng đang trả về một ký tự (trong ví dụ ở trên là ký tự NULL), tùy thuộc vào giá trị của một ràng buộc giá trị, được đánh giá tại thời điểm thực thi.

Hiệu quả thực sự là chúng ta có thể "động" nhận được hiệu ứng của một trong hai:

 ORDER BY activation_name ASC, NULL DESC

hoặc

 ORDER BY NULL ASC, activation_name DESC

hoặc

 ORDER BY NULL ASC, NULL DESC

tùy thuộc vào giá trị mà chúng tôi cung cấp cho trình giữ chỗ:sort_param.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn gốc JPA trả về Double hoặc BigDecimal

  2. psql - lưu kết quả của lệnh vào một tệp

  3. Biến ràng buộc cho tên cột trong PHP cho truy vấn Postgresql

  4. Những thách thức khi mở rộng quy mô cơ sở dữ liệu Moodle PostgreSQL

  5. Trích xuất và tính trung bình các giá trị không liên quan trong DB tạm thời trong postgresql