mysql新手 - 加入

时间:2009-12-14 19:56:19

标签: mysql join

我有一张电影和一张选票表。用户投票选择他们喜欢的电影。 我需要显示电影的总票数下降的电影列表。 我现在有什么作品。唯一的问题是它没有显示0票的电影。

SELECT m.name, m.imdb_url, m.comment, COUNT(v.movie_id) AS votes
FROM movies m, votes v
WHERE v.movie_id=m.movie_id
GROUP BY v.movie_id
ORDER BY votes DESC

5 个答案:

答案 0 :(得分:5)

你需要做一个外连接;你编码的是隐式内连接。

LEFT OUTER JOIN将从“左”表中获取所有行,并从右表中获取任何匹配的记录。右表中缺少匹配记录的任何左表记录对于正确的表值将为空。您可以通过多种方式将这些空值转换为0。

答案 1 :(得分:1)

我相信你所期待的是left join。你的SQL看起来像:

SELECT m.name, m.imdb_url, m.comment, COUNT(v.movie_id) AS votes
FROM movies AS m 
LEFT JOIN votes AS v ON m.movie_id = v.movie_id
GROUP BY v.movie_id
ORDER BY votes DESC

答案 2 :(得分:0)

对于没有投票的电影,您的表的值是0,还是使用NULL / EMPTY?

如果它记录零,那么使你的SQL像这样:

“选择电影WHERE投票> = 0”

答案 3 :(得分:0)

你可能需要做一个left join,其中包括左表(电影)中的记录,即使右表中没有匹配(投票)。

答案 4 :(得分:0)

根据和平主任的建议:

SELECT m.name, m.imdb_url, m.comment, COUNT(v.movie_id) AS votes

FROM movies m
left outer join votes v
on v.movie_id=m.movie_id

GROUP BY v.movie_id
ORDER BY COUNT(v.movie_id) DESC

我不确定mysql,但并非所有数据库都允许您使用ORDER BY位中的别名,因此我已将votes替换为COUNT(v.movie_id)