左连接让我难过

时间:2012-10-17 03:55:24

标签: mysql left-join

我有2张桌子,人物和电影

人员表具有ID和性别,电影表具有ID,movie_type和movie_attended。 genderID和movie_attended可以为null。

我想创建一个返回3列的查询:gender,movie_attended(但必须是浪漫电影),以及拥有该性别和movie_attended的人数。

现在我有

select person.gender, movie.movie_attended, count(person.gender)
from person left join movie
on person.ID = movie.ID
where movie.movie_type = "romance"
order by person.gender DESC

不幸的是,这只给了我一行信息。如果我删除了计数(person.gender),我会得到太多行。可以说只有3部浪漫电影可供选择。我希望我的第一行阅读男性 - 笔记本 - 12.第二排:男性 - 卡萨布兰卡 - 8.第三排:男性 - 罗密欧&朱丽叶 - 2.第四排:男 - 空 - 2

然后从女性

重新开始

谢谢

2 个答案:

答案 0 :(得分:0)

select gender, count(person.gender), movie.movie_attended
from person left join movie
on person.movie_id = movie.movie_id # or whatever it is called.
where movie.movie_type = "romance"
group by person.gender

答案 1 :(得分:0)

我很惊讶您设法运行该查询,因为您缺少使用聚合函数时始终需要的'group by'语句。 'group by'语句应包含与'select'语句相同的字段,不带聚合函数。

select person.gender, movie.movie_attended, count(person.gender)
from person left join movie
on person.ID = movie.ID
where movie.movie_type = "romance"
group by person.gender, movie.movie_attended
order by count (person.gender) DESC

我已经更改了您的'order by'语句,因为您提供的数据表明查询是按结果数量排序的,而不是按性别排序。

我觉得person.id应该等于movie.id似乎很奇怪。在数据库结构方面,拥有一个人员表,一个电影表和一个由people.id和movie.id构建的连接表似乎更实际,其中存储了哪些人看过哪些电影。