从group_concat结果中选择不同的值

时间:2016-01-03 16:55:27

标签: mysql group-concat

我是一名有兴趣学习MySQL并正在建立电影网站的学习者。如果有人能帮到我,我真的很感激。

所以我做了一个像这样的查询,

SELECT Movie.idMovie,MovieTitle,Description,
group_concat(ActorName) AS ActorName,group_concat(DirectorName)
FROM EAD_ASSIGNMENT.Movie 
INNER JOIN EAD_ASSIGNMENT.Movie_Actor
ON EAD_ASSIGNMENT.Movie.idMovie = EAD_ASSIGNMENT.Movie_Actor.idMovie
INNER JOIN EAD_ASSIGNMENT.Actor
ON EAD_ASSIGNMENT.Movie_Actor.idActor = EAD_ASSIGNMENT.Actor.idActor
INNER JOIN EAD_ASSIGNMENT.Movie_Director
ON EAD_ASSIGNMENT.Movie.idMovie = EAD_ASSIGNMENT.Movie_Director.idMovie
INNER JOIN EAD_ASSIGNMENT.Director
ON EAD_ASSIGNMENT.Movie_Director.idDirector =
EAD_ASSIGNMENT.Director.idDirector
WHERE Movie.idMovie = 1;

我看到的表格看起来像这样

1 || Frozen || A magical movie || Idina Menzel,Kristen Bell || Jennifer Lee, Chris Buck

然后我查询了WHERE Movie.idMovie = 2

令我震惊的是,我得到的是这个(问题出在最后一个单元格),

2 || Starwars || A very nice movie || Carrie Fisher,Harrison Ford || J.J. Abrams,J.J. Abrams

所以问题是group_concat不像我想象的那样工作。在这种情况下,第一个查询看起来很好但是对于第二个查询,它将1个值作为一个组进行处理并将其与自身分组(猜测)?有没有什么方法可以对结果进行分组,如果有超过1个','在它们之间,如果只有1个结果则没有做任何事情?

1 个答案:

答案 0 :(得分:1)

所以我意识到我可以通过包含一个DISTINCT函数来解决它,告诉查询只有在它们不同时才能分组。正确的查询就是这个,

SELECT Movie.idMovie,MovieTitle,Description,
group_concat(DISTINCT ActorName) AS ActorName,group_concat(DISTINCT DirectorName)
FROM EAD_ASSIGNMENT.Movie 
INNER JOIN EAD_ASSIGNMENT.Movie_Actor
ON EAD_ASSIGNMENT.Movie.idMovie = EAD_ASSIGNMENT.Movie_Actor.idMovie
INNER JOIN EAD_ASSIGNMENT.Actor
ON EAD_ASSIGNMENT.Movie_Actor.idActor = EAD_ASSIGNMENT.Actor.idActor
INNER JOIN EAD_ASSIGNMENT.Movie_Director
ON EAD_ASSIGNMENT.Movie.idMovie = EAD_ASSIGNMENT.Movie_Director.idMovie
INNER JOIN EAD_ASSIGNMENT.Director
ON EAD_ASSIGNMENT.Movie_Director.idDirector =
EAD_ASSIGNMENT.Director.idDirector
WHERE Movie.idMovie = 1;

如果有任何方法可以改进此查询,请告诉我,这似乎对我有帮助。 :)