mysql - 内连接的笛卡尔积

标签 mysql sql join cartesian

我有两个表: 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,一次作为moviesmo 从未在任何 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/

相关文章:

mysql - mysql中每一行的协方差

php - 如何从html输入向MySQL插入日期?

php - 如何在一个 MySQL 查询中选择 2 个连接表?

mysql - 我在连接3个MySQL表时遇到问题,如何改善语法?

mysql - 在 mySQL 中选择所有 (*) 字段时为单个字段添加别名

mysql - Sql 查询,table/w 双行,join on IFNULL 函数 - 表 join on tiself 与变量列

基于 Excel 文件数据库上的日期的 SQL 查询

mysql - 获取计数和不同的 SQL 查询

mysql - SQL语句错误,内连接

hibernate - JPA/Hibernate Cascade ALL 导致冗余左外连接