如何在多表到多表关系中正确执行选择

时间:2013-05-09 09:42:53

标签: mysql select

我有这个查询

SELECT f.id_film, title, year, GROUP_CONCAT(actor SEPARATOR '|') AS 'actors',
GROUP_CONCAT(director SEPARATOR '|') AS 'directors' 
FROM film f JOIN middle m ON f.id_film = m.id_film
JOIN actors a ON m.id_name = a.id_actor 
JOIN directors d ON m.id_name = d.id_director 
WHERE id_category = "com" GROUP BY f.id_film

应该从表actor和表导向器中收集名称。中间表实际上是两个表之间的“连接器”,并且使用“类型”列保持“a”或“d”值来区分彼此。我无法将演员与导演正确分开,这意味着无论类型如何,查询都会返回所有id。我尝试过子查询但没有成功。任何建议将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

我认为你缺少在加入演员和导演表时加入中间表的“类型”字段比较,

尝试以下:

SELECT f.id_film, title, year, GROUP_CONCAT(actor SEPARATOR '|') AS 'actors',
GROUP_CONCAT(director SEPARATOR '|') AS 'directors' 
FROM film f JOIN middle m ON f.id_film = m.id_film
LEFT JOIN actors a ON m.id_name = a.id_actor AND m.type = 'a'
LEFT JOIN directors d ON m.id_name = d.id_director AND m.type = 'd'
WHERE id_category = "com" GROUP BY f.id_film

@michael请参阅SqlFiddle,您需要在左侧放置数据库模式语句并插入示例数据语句,并且可以在问题中提供链接和预期输出,以便我们可以尝试使用示例数据的解决方案。