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

2
SELECT m.actor
FROM movies m 
WHERE 
m.movie = 'Pulp Fiction'
AND NOT EXISTS
(
  SELECT 1
  FROM movies m1 
    JOIN movies m2 ON m1.movie = m2.movie 
      AND m1.actor <> m2.actor 
      AND m2.movie <> 'Pulp Fiction' 
      AND m2.actor IN (SELECT actor FROM movies WHERE movie = 'Pulp Fiction')
  WHERE
      m.actor = m1.actor 
)

根据ChrisProsser完成的 SQLFiddle,它应该给出正确的结果。

于 2013-10-02T13:14:05.160 回答
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 回答
0

试试这个....

SELECT actor, movie 
FROM actor
where movie like 'Pulp Fiction' AND
movie NOT IN(select movie from tablename t where t.actor like actor and movie NOT LIKE 'Pulp Fiction');
于 2013-10-02T13:42:16.700 回答
-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' 
) 

我建议您将电影和演员存储在不同的表中(“电影”表和“演员”表),并使用“电影演员”表将数据相互连接。

于 2013-10-02T12:52:26.287 回答