我似乎无法弄清楚我在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
或者这是不可能的?
答案 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;