数据库 - 检索未使用位置的结果

时间:2016-02-28 07:52:32

标签: mysql sql database select database-design

如何检索数据库中未使用位置的结果。这是一个例子:

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

现在我希望我的查询从TABLE POSITION中检索位置,而某个组织没有使用该位置。这就是我所做的,它会返回太多结果:

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-02081-0”

的organizationID未使用的位置

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您可以使用NOT EXISTS

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

上述查询会返回与POSITION的{​​{1}}记录无关的所有OFFICER条记录。

答案 2 :(得分: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
相关问题