2013-05-27 68 views
1

大家好我目前正在做一些SQL作業,並且正在尋找一個正確的方向。 我需要顯示從未在派拉蒙電影中工作的導演列表。查找不等於另一個值的值

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

這顯示了從來沒有的導演,以及曾經爲派拉蒙工作過的導演,也與其他人一起完成了另一項工作。

我想也許一個EXISTS子查詢會幫助我,但我結束了完全相同的結果。

難道有人會知道一種方法來檢查直射者EVER是否與派拉蒙一起工作並將他們從列表中刪除?編輯** DirectorID不屬於這兩個表格。 directinfo(MVID,directorID) movieinfo(MVID,稱號,等級,年份,長度,工作室)

+0

不'directorID'和'studio'屬於什麼表? –

+0

你必須指定連接條件。你有條件....但這不是連接條件....意味着你必須指定一些常見的B/W movieinfo和direcinfo表,也做子查詢..你拉的所有導演Ids工作在最重要的圖片...像--- ---其中movieinfo.DirectorID = directinfo.DirectorID和directorInfo.Director ID不是IN(從directorinfo中選擇不同的directorID,其中studeio ='Paramount Picture'); – MStp

回答

1

你可以使用的東西,如下列:

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

這會給你所有董事的標識,其沒有參與派拉蒙影業工作室。

編輯:刪除了第二個錯誤的答案。

+1

您的第二個查詢將返回與Paramount Picture studio不同的至少一次涉及工作室的所有導演。那就錯了。 –

+0

與此相關的問題是,它顯示了與多個人合作的董事,包括派拉蒙。 – Rrr

+1

對第一個建議+1。但是,我認爲如果OP沒有爲他們工作,建議替代OP的做法是沒有意義的。 –

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 
相關問題