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

SQL để nhận bản ghi riêng biệt cho sự kết hợp của hai cột (Không phân biệt thứ tự)

Đây là một phương pháp sử dụng least()greatest() :

select least(source, destination), greatest(source, destination), max(distance)
from distance
group by least(source, destination), greatest(source, destination);

Điều này có nhược điểm là bạn có thể trả về một hàng không có trong bảng. Ví dụ:nếu bạn có một hàng duy nhất với "Mumbai / Chennai / 500", thì truy vấn này sẽ trả về "Chennai / Mumbai / 500" - và hàng này không có trong bảng gốc.

Vì vậy, một phương pháp thay thế là:

select source, destination, distance
from distance
where source < destination
union all
select destination, source, distance
from distance d
where source > destination and
      not exists (select 1
                  from distance d2
                  where d2.source = d.destination and d2.destination = d.source
                 );

Phiên bản này cũng tương thích với ANSI và sẽ hoạt động trong tất cả các cơ sở dữ liệu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi Chèn PHP / SQL khi sử dụng Trình giữ chỗ được Đặt tên

  2. Làm cách nào để chọn hàng có ID cao nhất trong MySQL?

  3. Không thể kết nối với cơ sở dữ liệu localhost từ máy chủ node.js

  4. Chèn nhiều hàng với các câu lệnh được chuẩn bị sẵn PDO

  5. Khi nào thì thêm chỉ mục nào vào bảng trong Rails