Mysql 使用子查询排除值

Mysql 使用子查询排除值,mysql,sql,subquery,Mysql,Sql,Subquery,我有一个使用三个表的模式: 参与者列表和间隔参与者id 电影标题和间隔movid\u id列表 一个对这两个项目进行编目的表格,如下面的表格: CREATE TABLE actors_movies ( actor_movie_id INT AUTO_INCREMENT, actor_id INT, movie_id INT, PRIMARY KEY (actor_movie_id), KEY actor_id (actor_id), KEY movie_id (movie_id) ); 我想

我有一个使用三个表的模式:

  • 参与者列表和间隔参与者id
  • 电影标题和间隔movid\u id列表
  • 一个对这两个项目进行编目的表格,如下面的表格:

    CREATE TABLE actors_movies (
    actor_movie_id INT AUTO_INCREMENT,
    actor_id INT,
    movie_id INT,
    PRIMARY KEY (actor_movie_id),
    KEY actor_id (actor_id),
    KEY movie_id (movie_id)
    );
    
  • 我想写一个查询,显示一个演员没有拍过的所有电影。我遇到的问题是一部电影可以有多个演员。因此,即使您根据id或姓名排除了演员,该电影仍可能被纳入结果中

    我试着写下面的查询,但它有点多余和手动。我如何利用子查询来抑制演员参与的电影,并考虑多个演员的问题

    SELECT movie_name
    FROM movies as m
    JOIN actors_movies as am on m.movie_id = am.movie_id
    JOIN actors as a on a.actor_id = am.actor_id
      WHERE actor_name <> 'actor_name'
       AND am.movie_id NOT IN(4,14);
    
    选择电影名称
    从电影到电影
    在m.movie\u id=am.movie\u id上以am的身份加入演员电影
    在a.actor\u id=am.actor\u id上将actors作为
    其中演员姓名“演员姓名”
    am.movie_id不在(4,14);
    

    任何帮助都将不胜感激

    这是左外连接的典型情况:

    select movie_name
    from movies as m
    inner join actors_movies as am on m.movie_id = am.movie_id
    left outer join actors as a on a.actor_id = am.actor_id
        and actor_name = 'actor_name'
    where a.actor_id is null;
    

    我相信这就是我一直在寻找的。非常感谢。