2012-04-21 81 views
0

加入我似乎無法找出什麼地方錯了我的語法,用於執行在MySQL完整的加盟使用MySQL的跨越3個表

select movies.title, genres.name  
from movies 
full join genres_in_movies 
on movies.id = genres_in_movies.movie_id 
full join genres 
on genres_in_movies.genre_id = genres.id 
where movies.id = 12345; 

下面是相關表格:

genres 
id (pk) 
name 

movies 
id (pk) 
title 

genres_in_movies 
genre_id 
movie_id 

我試圖找到一張列出電影及其流派的表格。單個電影可能在流派表中有多個條目,所以我使用完全連接來獲取所有我可以獲得的結果,而無需在最終結果中重複movies.title屬性。

我正在使用mysql,如果這有什麼區別。我得到的錯誤抱怨我的語法圍繞線錯誤5.

編輯:

好,還有一個樣本輸出現在是:

Name Genre 
Batman Action 
Batman Crime 
Batman Mystery 

我希望得到一個表格,將不是持有3行來容納這些信息,而是擁有類似的信息,而是擁有類似信息:

Title Genre 
Batman Action, Crime, Mystery 

或者是不可能的?

回答

1

MySQL不支持FULL JOIN。使用UNION子句必須使用左外連接和右外連接的組合。

你可以看到解釋here

無論如何,我不認爲一個完整的聯合會給你你想要得到什麼。

爲了避免每部電影有多個記錄,您應該按電影分組,但是您必須執行組concat才能在單個記錄中顯示所有流派。

請爲您的查詢提供樣本預期輸出。

編輯:

select movies.title, GROUP_CONCAT(genres.name SEPARATOR ‘, ’) as 'genres' 
from movies 
inner join genres_in_movies on movies.id = genres_in_movies.movie_id 
inner join genres on genres_in_movies.genre_id = genres.id 
where movies.id = 12345 
group by movies.title; 
+0

見我的編輯在原來的職位。 – Waffles 2012-04-21 02:23:26

+0

查看我添加的查詢 – Christian 2012-04-21 03:08:26

2

試試這個:

SELECT m.title, g.name 
FROM movies m 
JOIN genre_in_movies gim on gim.movie_id = m.id 
JOIN genres g on g.id = gim.movie_id 
WHERE m.id = '12345'