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

Câu lệnh Chọn lồng nhau trong phép nối MYSQL

Tôi thực hiện loại truy vấn này theo cách khác, với kết hợp loại trừ thay vì một truy vấn con. Bạn muốn tìm các hàng B có Thời gian tối đa cho một ID nhất định; nói cách khác, không có hàng nào khác có Thời gian lớn hơn và có cùng ID.

SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
LEFT OUTER JOIN B AS B2 ON B.ID = B2.ID AND B.Time < B2.Time
WHERE B2.ID IS NULL

Bạn cũng có thể sử dụng bảng dẫn xuất , điều này sẽ hoạt động tốt hơn so với việc sử dụng một truy vấn con tương quan.

SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
JOIN (SELECT ID, MAX(Time) AS Time FROM B GROUP BY ID) AS B2
  ON (B.ID, B.Time) = (B2.ID, B2.Time)

Tái bút:Tôi đã thêm greatest-n-per-group nhãn. Loại câu hỏi SQL này xuất hiện hàng tuần trên Stack Overflow, vì vậy bạn có thể theo dõi thẻ đó để xem hàng tá câu hỏi tương tự và câu trả lời của chúng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP - Chèn ngày vào mysql

  2. Đặt hàng nhiều cột ASC

  3. Xóa hàng triệu hàng trong MySQL

  4. Sao chép cơ sở dữ liệu cục bộ của tôi (Mysql) sang cơ sở dữ liệu từ xa (phpmyadmin)

  5. Làm thế nào để còn lại tham gia 2 bảng trên 2 cơ sở dữ liệu khác nhau?