找到不等于另一个值的值

时间:2013-05-27 05:22:42

标签: sql

大家好我正在做一些SQL作业,我正在寻找正确的方向。 我需要显示一个从未在最重要的电影中工作的导演列表。

select distinct directorID
from movieinfo natural join directinfo
where studio <> 'Paramount Picture';

这显示了从未有过的董事,以及为最高层工作过的董事,以及与其他人一起完成另一份工作。

我想也许EXISTS子查询可以帮助我,但我最终得到了完全相同的结果。

有人知道一种检查方向是否与最高层合作并将其从列表中删除的方法吗?

编辑** DirectorID不属于两个表。 directinfo(mvid,directorID) movieinfo(mvid,标题,评级,年份,长度,工作室)

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

SELECT directorID FROM directinfo WHERE directorID NOT IN 
    (SELECT directorID FROM movieinfo WHERE studio='Paramount Picture');

这将为您提供所有未参与派拉蒙影业工作室的导演ID。

编辑:删除了第二个错误的答案。

答案 1 :(得分:0)

使用EXISTS

尝试此操作
SELECT  a.*
FROM    directinfo a
WHERE   NOT EXISTS
        (
            SELECT  1
            FROM    movieinfo b
            WHERE   a.directorID = b.directorID AND
                    b.studio <> 'Paramount Picture'
        )

这假设列studio属于表movieinfo,两个表都包含directorID

另一种方法是使用LEFT JOIN...IS NULL

SELECT  a.*
FROM    directinfo a
        LEFT JOIN movieinfo b
            ON  a.directorID = b.directorID AND
                b.studio <> 'Paramount Picture'
WHERE   b.directorID IS NULL