2016-01-03 18 views
1

我是一個正在學習MySQL並正在構建電影網站的學習者。如果有人能夠幫助我,我會很感激。從group_concat結果中選擇不同的值

所以,我做一個查詢,是這樣的,

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個結果,那麼不做任何事情?

回答

0

所以我意識到我可以通過包含一個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; 

讓我知道是否有任何方法來改善此查詢,這似乎幫助我現在。 :)