2012-04-21 35 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'