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

Double JOIN với cùng một bảng hai lần

Mệnh đề where giới hạn trên các bảng nối bên trái đang loại bỏ kết quả mong muốn do các bản ghi null ... Vì vậy, hãy di chuyển các giới hạn đến chính phép nối để giới hạn được áp dụng TRƯỚC khi phép nối, do đó giữ các bản ghi giá trị null.

SELECT i.*,r.*,r2.*, r.points+r2.points AS sum_points
FROM list_couples AS l
LEFT JOIN rank AS r ON l.p_1=r.player
  and r.week='$week' AND r.anno='$anno' 
LEFT JOIN rank AS r2 ON l.p_2=r2.player
  and  r2.week='$week' AND r2.anno='$year'
ORDER BY sum_points DESC

Vì sao Diêm Vương không có tuần / năm (thông báo) nên mệnh đề where sẽ loại bỏ kỷ lục đó. bằng cách di chuyển các giới hạn cho phép nối, bộ lọc được áp dụng trước các lần xuất hiện phép nối, do đó giữ cho phép nối bên ngoài LEFT.

Nói một cách khác, Mệnh đề WHERE đang làm cho bên trái tham gia một bên trong!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cần lấy dữ liệu sản phẩm ra khỏi cơ sở dữ liệu mysql

  2. Làm thế nào để tránh sửa chữa với Keycache?

  3. Cảnh báo:mysql_fetch_array ():đối số được cung cấp không phải là kết quả MySQL hợp lệ

  4. Chèn vào bảng MySQL hoặc cập nhật nếu tồn tại

  5. Sử dụng Cố vấn Sao lưu Cơ sở dữ liệu để Tự động hóa Nhiệm vụ Bảo trì