2013-11-15 62 views
0

我有利用三個表的模式:排除值與子查詢

  1. 演員名單和間隔actor_id電影片名的
  2. 列表和間隔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); 

任何幫助將不勝感激!

回答

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; 
+0

我相信這就是我一直在尋找。謝謝! – user2356890