2016-02-28 47 views
1

如何檢索未使用職位在我的數據庫中的結果。這裏是一個例子:數據庫 - 檢索未使用職位的結果

TABLE POSITION 
PosID PosName 
101  President 
102  Vice President 
103  Secretary 
104  Treasurer 
105  Auditor 
106  Srgt of Arms 

TABLE OFFICER 
OfficerID  OrganizationID Name PosID (FK to TABLE POSITION) 
1001   2016-02081-0 Kris 101 
1002   2016-02081-0 Nitche 102 
1003   2016-02081-0 Russel 103 

現在我想我的查詢檢索位置不被某個組織使用的位置。這是我做的,它返回的結果太多:

SELECT * 
FROM POSITION, OFFICER 
WHERE OrganizationID = '2016-02081-0' AND OFFICER.PosID != POSITION.PosID; 

注意到,我只想檢索結果如下

TABLE POSITION 
PosID PosName 
104  Treasurer 
105  Auditor 
106  Srgt of Arms 

應該取回未使用的「2016-該organizationID位置02081-0'

+0

請考慮接受答案,以表明它幫助你,通過cllicking複選標記圖標。 – philipxy

回答

0

您可以使用NOT EXISTS

SELECT * 
FROM POSITION 
WHERE NOT EXISTS (SELECT 1 
        FROM OFFICER 
        WHERE OrganizationID = '2016-02081-0' AND 
         OFFICER.PosID = POSITION.PosID); 

上面的查詢將返回所有POSITION記錄不涉及具有OrganizationID = '2016-02081-0'一個OFFICER記錄。

+0

wooaaah @。@謝謝......我很感謝我的好先生! :)現在有道理:) –

1

您可以使用not in操作:

SELECT PosID 
FROM position 
WHERE PosID NOT IN (SELECT PosID 
        FROM officer) 

還是not exists操作:

SELECT PosID 
FROM position p 
WHERE NOT EXISTS (SELECT * 
        FROM officer o 
        WHERE p.PosId = o.PosId) 
+0

謝謝你好先生:))它現在的作品! :) –

0

我會用左連接來做到這一點。這樣我們不需要子查詢。

SELECT  p.* 
    FROM  Position p 
    LEFT JOIN Officer o on o.PosID = p.PosID and OrganizationID = '2016-02081-0' 
    WHERE  o.OfficerId is null