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

Cách tham gia có nhiều bảng quan hệ và tìm nạp kết quả theo loại

Sử dụng LEFT JOIN để đảm bảo nếu các bảng quan hệ không có bất kỳ dữ liệu nào, chúng ta vẫn có thể có các bản ghi từ bảng chính.

Tham khảo: Hiểu MySQL THAM GIA TRÁI

(Các) vấn đề :

  • Tên trường sai :pr.interview_id = i.interview_id , nó phải là pr.interview_id = i.id vì chúng tôi không có bất kỳ trường phỏng vấn_id nào trong interviews bảng, nó sẽ là id - dựa trên truy vấn của bạn.
  • pr.interview_id = i.idwhere mệnh đề :Nếu participant_rating bảng không có bất kỳ bản ghi nào cho một cuộc phỏng vấn nhất định, điều này sẽ khiến cuộc phỏng vấn đó bị xóa khỏi tập hợp kết quả. Sử dụng LEFT JOIN cho participant_rating bảng.
  • sr.interview_id = i.idwhere mệnh đề :Nếu system_rating bảng không có bất kỳ bản ghi nào cho một cuộc phỏng vấn nhất định, điều này sẽ khiến cuộc phỏng vấn đó bị xóa khỏi tập hợp kết quả. Sử dụng LEFT JOIN cho system_rating cả bảng.
  • Usage of AVG hoạt động nhưng sẽ không hoạt động đối với các hàm tổng hợp khác như SUM, COUNT .. bởi vì nếu chúng ta có một đến nhiều mối quan hệ thì việc nối sẽ làm cho sẽ có nhiều bản ghi cho cùng một hàng.

Giải pháp :

SELECT 
    i.id AS interview_id,
    i.candidate,  
    AVG(sr.rating) AS system_rating, 
    AVG(CASE WHEN pr.rater_type = 'Candidate' THEN pr.rating END) AS candidate_rating, 
    AVG(CASE WHEN pr.rater_type = 'Recruiter' THEN pr.rating END) AS recruiter_rating
FROM interviews i
LEFT JOIN system_rating sr ON sr.interview_id = i.id
LEFT JOIN participant_rating pr ON pr.interview_id = i.id
-- WHERE i.id IN (1, 2, 3) -- use whenever required
GROUP BY i.id



  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 mysql 1406

  2. MySQL Connect / C ++ 64 bit lỗi xây dựng

  3. Cài đặt MySQL Python trên Mac OS X

  4. Làm cách nào để gọi các mã nhị phân C ++ của tôi qua giao diện CGI?

  5. Làm thế nào để xử lý các phiên trên các thiết bị khác nhau?