我有两个表: Actor 和电影,以及连接它们的第三个表角色。 ActorId 是 Actor 的主键。 MovieCode 是电影表的主键。我有一个 Actor 的页面,我需要在其中显示电影的发布日期、电影的名称和 Actor 的角色。 我的查询是:
SELECT mo.date, mo.title, role.roleDescription
FROM movies mo, role
inner join actors
on role.actorId=actors.actorId
inner join movies
on role.movieCode=movies.movieCode
where role.actorid=2
查询返回笛卡尔积。可能是什么问题?提前谢谢您!
最佳答案
问题是您两次加入movies
:一次作为mo
,一次作为movies
。 mo
从未在任何 ON
子句或 WHERE
子句中提及,因此您永远不会过滤掉 mo
的任何值>。要修复此问题,只需删除 movies mo,
部分,然后更改 SELECT
列表中的字段以使用 movies
而不是 莫
:
SELECT movies.date, movies.title, role.roleDescription
FROM role
inner join actors
on role.actorId=actors.actorId
inner join movies
on role.movieCode=movies.movieCode
where role.actorid=2
此外,您实际上并不需要加入 actors
,因为您没有从 actors
中选择任何内容,并且您已经知道 actorid 的值
你想要的。因此,删除它,并为了清晰起见进行一些重组:
SELECT movies.date,
movies.title,
role.roleDescription
FROM movies
JOIN role
ON role.movieCode = movies.movieCode
WHERE role.actorid = 2
;
关于mysql - 内连接的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20732476/