如何检索数据库中未使用位置的结果。这是一个例子:
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未使用的位置答案 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