作为内连接的结果的笛卡尔积



我有两个表:演员和电影,以及第三个表角色,它连接它们。ActorId 是 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,一次是moviesmo从未在任何ON子句或WHERE子句中提及,因此您永远不会过滤掉mo的任何值。要修复它,只需删除movies mo,部分,然后将 SELECT -list 中的字段更改为使用 movies 而不是 mo

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
;

试试这个,因为你想为特定的演员选择电影和演员的角色,你可以跳过加入演员表,在你的查询中,你也加入了电影两次

SELECT mo.date, mo.title, r.roleDescription
FROM movies mo, 
INNER JOIN role r
ON r.movieCode=mo.movieCode
WHERE r.actorid=2

相关内容

  • 没有找到相关文章

最新更新