在3个表中使用mysql连接

时间:2012-04-21 01:13:44

标签: mysql join syntax

我似乎无法弄清楚我在mysql中执行完全连接的语法有什么问题

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

或者这是不可能的?

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:1)

MySQL不支持FULL JOIN。您必须使用UNION子句使用左外连接和右外连接的组合。

您可以看到解释here

无论如何,我不认为FULL JOIN会给你你想要的东西。

为了避免为每部电影分配多个记录,您应该按电影分组,但是您必须进行组连续显示单个记录中的所有类型。

请提供查询的预期输出示例。

编辑:

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;