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

Cách mysql định nghĩa DISTINCT () trong tài liệu tham khảo

Vì lợi ích hoàn chỉnh, tôi đang trả lời của riêng tôi và liên kết với một câu hỏi của riêng tôi. Có vẻ như hành vi này là hệ quả trực tiếp của tiêu chuẩn SQL cho phép khoảng trắng giữa hàm và dấu ngoặc đơn.

Vì (nói chung) được phép nói FUNCTION_NAME (x) nên khi hàm này được áp dụng cho thuật ngữ đầu tiên của lựa chọn

SELECT FUNCTION_NAME (x)

thì trình phân tích cú pháp sẽ gặp khó khăn trong việc thiết lập nếu đây là ngữ cảnh của tên hàm hoặc từ khóa sửa đổi SELECT.

Vì vậy, trong trường hợp trên, FUNCTION_NAME thực sự là FUNCTION_NAME_OR_KEYWORD cho trình phân tích cú pháp.

Nhưng nó còn đi xa hơn:vì khoảng cách giữa tên hàm và dấu ngoặc là IS cho phép nên trình phân tích cú pháp thực sự KHÔNG thể phân biệt giữa

SELECT FUNCTION_NAME_OR_KEYWORD(x)

SELECT FUNCTION_NAME_OR_KEYWORD(x)

(nó phải kiểm tra các từ khóa để xem chúng có phải là hàm hay không) và vì (x) sẽ được phân tích cú pháp thành x nên đối với FUNCTION_NAME_OR_KEYWORD -> DISTINCT (và tất cả các từ khóa sửa đổi SELECT khác) không có sự khác biệt giữa

SELECT DISTINCT x, y, z, ...

SELECT DISTINCT(x), y, z, ...

QED, nhưng không có tham chiếu cố định (giả định rằng tiêu chuẩn Tôi tin rằng không quan tâm đến khoảng trắng giữa các tên hàm và dấu ngoặc đơn là hợp lý, nhưng tôi không thể tuân theo ngữ pháp BNF đến mức tôi có thể trích dẫn quy tắc chính xác).

LƯU Ý:mysql có một số hàm nhất định mà nó quan tâm đến khoảng trắng giữa các hàm và dấu ngoặc đơn, nhưng tôi tin rằng đây là những ngoại lệ (do đó, tùy chọn máy chủ để bỏ qua nó)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql 1 Hàng Ngẫu nhiên

  2. Làm thế nào để hiển thị giá trị của một biến tại dòng lệnh trong MySQL?

  3. Cách giới hạn truy vấn SHOW TABLES

  4. VARCHAR (20000) có hợp lệ trong MySQL không?

  5. PHP:Cập nhật trùng lặp truy vấn MySQL không có lý do