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

Sử dụng phép nối với ba bảng khi một trường có thể rỗng

Bạn đang thực hiện THAM GIA BÊN TRONG, nhưng bạn cần THAM GIA NGOÀI TRỜI, cụ thể là THAM GIA TRÁI. Với THAM GIA TRÁI, bảng "ở bên trái" luôn được tham gia và nếu không có sự tương ứng, các trường của bảng bên phải sẽ được đặt thành rỗng. Sự khác biệt được giải thích rất rõ trong trang wikipedia này .

Sau đó, bạn phải nhóm các hàng có cùng id gửi và đếm số lượng hàng đã được nhóm lại, lưu ý rằng nếu một bài gửi chỉ có một nhận xét và một bài khác không có thì cả hai đều có 1 hàng được nhóm ... Nếu một lần gửi không có nhận xét , trong truy vấn tiếp theo c.submissionid sẽ là null, vì vậy

SQL của bạn có thể là

SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid, 
IF(c.submissionid IS NULL, 0, COUNT(*))  AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
GROUP BY (s.id)
ORDER BY s.datesubmitted DESC
LIMIT 10

Có thể có lỗi, tôi chưa kiểm tra truy vấn ... Nhưng tôi hy vọng đã cung cấp cho bạn ý tưởng đúng, đó là sự khác biệt giữa các phép nối ngoài và phép nối 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. Tham gia bên trong với 3 bảng trong mysql

  2. Cách hiệu quả nhất để lưu trữ thứ tự sắp xếp trên một nhóm bản ghi trong cơ sở dữ liệu là gì?

  3. thủ tục được lưu trữ mysql tự gọi đệ quy

  4. SQL JOIN nhiều-nhiều

  5. mysql_fetch_array và chỉ các phím mảng chuỗi