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

Loại bỏ các hàng trùng lặp trong câu lệnh PostgreSQL SELECT

PostgreSQL hiện không cho phép GROUP BY không rõ ràng các câu lệnh trong đó kết quả phụ thuộc vào thứ tự quét bảng, kế hoạch được sử dụng, v.v. Đó là cách tiêu chuẩn nói rằng nó sẽ hoạt động AFAIK, nhưng một số cơ sở dữ liệu (như phiên bản MySQL trước 5.7) cho phép truy vấn lỏng lẻo chỉ chọn giá trị đầu tiên gặp phải đối với các phần tử xuất hiện trong SELECT danh sách nhưng không có trong GROUP BY .

Trong PostgreSQL, bạn nên sử dụng DISTINCT ON cho loại truy vấn này.

Bạn muốn viết một cái gì đó như:

SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author 
left join anwendung on anwendung.name = autor.anwendung;

(Cú pháp được sửa chữa dựa trên nhận xét tiếp theo)

Điều này hơi giống với ANY_VALUE(...) của MySQL 5.7 chức năng giả cho nhóm group by , nhưng ngược lại - nó nói rằng các giá trị trong distinct on mệnh đề phải là duy nhất và bất kỳ giá trị nào cũng được chấp nhận cho các cột không được chỉ định.

Trừ khi có ORDER BY , không có người bảo đảm về giá trị nào được chọn. Bạn thường phải có ORDER BY để có thể dự đoán.

Người ta cũng lưu ý rằng việc sử dụng tổng hợp như min() hoặc max() sẽ hoạt động. Mặc dù điều này đúng - và sẽ dẫn đến kết quả đáng tin cậy và có thể dự đoán được, không giống như việc sử dụng DISTINCT ON hoặc GROUP BY tham vọng - nó có chi phí hiệu suất do cần phải sắp xếp hoặc tổng hợp thêm và nó chỉ hoạt động đối với các kiểu dữ liệu thứ tự.



  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ị trí chính xác của các bảng cơ sở dữ liệu MySQL trong thư mục XAMPP là gì?

  2. Ngoại lệ truy cập trình xử lý ngoại lệ MySQL đang được xử lý

  3. So sánh các chuỗi với một chuỗi có khoảng trống trước đó trong khi chuỗi kia thì không

  4. Làm cách nào để Chèn nhiều bản ghi trong một lần truy cập cơ sở dữ liệu bằng cách sử dụng PDO?

  5. SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo không thành công:tên nút hoặc tên dịch vụ được cung cấp hoặc không được biết