簡體   English   中英

LEFT JOIN 和 INNER JOIN 在一個查詢中

[英]LEFT JOIN and INNER JOIN in one query

我有 3 個表: coursesuserscourses course_ratings (該表具有用戶和課程的外鍵以及包含用戶對課程評分的列rating

我想獲得所有課程,即使是那些與course_ratings表無關的課程,但如果這門課程相關,那么我想獲得與該課程相關的所有用戶的平均評分和計數。 這是我的 SQL 查詢:

SELECT c.title, COALESCE (AVG(cr.rating), 0), COUNT(u.user_id) 
FROM courses c
LEFT JOIN course_ratings cr ON c.course_id = cr.course_id
JOIN users u ON u.user_id = cr.user_id
GROUP BY c.course_id;

如您所見,我什至嘗試獲得那些沒有任何評分的課程並將其評分為 0。但結果,我只有至少有一個評分的課程。

使用兩個left join

SELECT c.title, COALESCE(AVG(cr.rating), 0), COUNT(u.user_id) 
FROM courses c LEFT JOIN 
     course_ratings cr
     ON c.course_id = cr.course_id LEFT JOIN
     users u
     ON u.user_id = cr.user_id
GROUP BY c.title;

我更改了GROUP BY列以匹配SELECT

請注意,您實際上並不需要users表:

SELECT c.title, COALESCE(AVG(cr.rating), 0), COUNT(cr.user_id) 
FROM courses c LEFT JOIN 
     course_ratings cr
     ON c.course_id = cr.course_id 
GROUP BY c.title;

您需要的信息實際上在course_ratings (好吧,假設該表中的所有user_id都是有效的,這似乎是一個合理的假設)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM