3

次のような俳優と映画の 2 つの列を持つ単一のテーブルがあります。

ACTOR  | MOVIE
-------+-------------
Volta  | Pulp Fiction
Bruce  | Pulp Fiction
Rhame  | Pulp Fiction
Walke  | Pulp Fiction
Rhame  | Bad Movie
Bruce  | Bad Movie
Volta  | Decent Movie
Brian  | Decent Movie
Walke  | Awesome Movie
Brian  | Awesome Movie

パルプ フィクションに出演した俳優のうち、パルプ フィクションの別の俳優と一緒に別の映画に出演したことがない俳優を知りたい.

この例から、出力は次のようになります。

Volta
Walke

彼らは、パルプフィクションの他の俳優なしで、それぞれパルプフィクションとディーセントムービーとオーサムムービーに出演したためです.

私はMySQLを使用しています。

4

4 に答える 4

0

もっと簡単な方法があるかもしれませんが、これはうまくいくはずです:

select m.actor 
  from movies m
 where m.movie = 'Pulp Fiction'
   and m.actor not in (
       select m2.actor
         from movies m1,
              movies m2,
              movies m3
        where m1.actor = m2.actor
          and m1.movie = 'Pulp Fiction'
          and m2.movie != m1.movie
          and m3.movie = m2.movie
          and m3.actor in (select m4.actor
                             from movies m4
                            where m4.movie = 'Pulp Fiction')
        group by m2.actor
        having count(*) > 1);

これをテストするためにSQL Fiddleを作成しましたが、出力は正しいです。

于 2013-10-02T13:01:28.317 に答える
-1
SELECT actor FROM table AS t1  
WHERE movie = 'Pulp Fiction' AND  
NOT EXISTS( 
  SELECT 1 FROM table AS t2 WHERE t2.actor = t1.actor AND movie <> 'Pulp Fiction' 
) 

ただし、映画と俳優を別のテーブル (「movie」テーブルと「actor」テーブル) に保存し、「movie_actor」テーブルを使用してデータを相互に接続することをお勧めします。

于 2013-10-02T12:52:26.287 に答える