问题
I'm trying to make something like a chart list and my actual query is like this:
SELECT
user.username,
songs.*,
albums.desc,
albums.release,
albums.name,
AVG(songrating.rating)
FROM
songs
INNER JOIN
user
ON
songs.userid=user.id
INNER JOIN
albums
ON
songs.albumid=albums.id
INNER JOIN
songrating
ON
songs.id=songrating.songid
GROUP BY
songrating.songid
it only shows entries with at least one rating entry, but I also want these without a rating
I tried to use it with if / case but it doesn't work (or I'm doing something wrong)
If I remove the avg etc, it works correctly.
回答1:
It may be JOIN issue
The INNER JOIN keyword selects all rows from both tables as long as there is a match between the columns in both tables.
The LEFT JOIN keyword returns all rows from the left table (table1), with the matching rows in the right table (table2). The result is NULL in the right side when there is no match.
Try LEFT JOIN
来源:https://stackoverflow.com/questions/17031556/avg-inner-join