0

我似乎无法弄清楚我在 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

或者那是不可能的?

4

2 回答 2

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'
于 2012-04-21T01:28:57.510 回答
1

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

你可以在这里看到一个解释。

无论如何,我不认为 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;
于 2012-04-21T01:33:13.910 回答