2016-02-28 77 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