【问题标题】:Excluding Values with a Subquery使用子查询排除值
【发布时间】:2013-11-15 05:08:18
【问题描述】:

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

  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)
    );
    

我想写一个查询来显示一个演员没有参加过的所有电影。我遇到的问题是一部电影可以有多个演员。因此,即使您根据 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);

任何帮助将不胜感激!

【问题讨论】:

    标签: mysql sql subquery


    【解决方案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;
    

    【讨论】:

    • 我相信这就是我想要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多