使用子查询排除值

时间:2013-11-15 05:08:18

标签: mysql sql subquery

我有一个使用三个表的架构:

  1. 演员列表和INTERVAL actor_id
  2. 电影标题列表和INTERVAL movid_id
  3. 对两者进行编目的表格,如下所示:

    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)
    );
    
  4. 我想写一个显示演员尚未进入的所有电影的查询。我遇到的问题是一部电影可能有多个演员。因此,即使您根据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);
    

    非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

这是LEFT OUTER JOIN的经典案例:

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;