列出了人们可以遇到的问题清单。这些人被一个号码所识别。这些人可能有任何问题(通常是5-10)。我想得到一份烟草不会出现问题的人员名单。我的解决方案是查询有烟草问题的人,然后用语句查询该查询以返回不在烟草查询中的数字。这很容易吗?这很接近吗?
查询以获取有烟草问题的人员名单
SELECT DISTINCT Person.PersonID
FROM tblKentuckyCounties INNER JOIN (tblComorbidity INNER JOIN (Person INNER JOIN tblComorbidityPerson ON Person.PersonID = tblComorbidityPerson.personID) ON tblComorbidity.ID = tblComorbidityPerson.comorbidityFK) ON tblKentuckyCounties.ID = Person.County
WHERE ((Not (tblComorbidity.comorbidityexplanation)="tobacco"));
查询我想要返回不在第一个查询中的人
SELECT Person.PersonID AS Expr1, [Tobacco Query].PersonID
FROM [Tobacco Query] INNER JOIN Person ON [Tobacco Query].PersonID = Person.PersonID;
答案 0 :(得分:1)
我对Access SQL方言并不十分了解,但您想要的是LEFT JOIN
,而不是INNER JOIN
。 LEFT JOIN
就像INNER JOIN
一样,它将为您提供连接左侧的所有行(在本例中为Person表),并连接到右侧的匹配行加入的一面。但是LEFT JOIN
还会为您提供左侧的行,不在右侧有匹配的行。对于该行子集,右侧列将具有NULL值。
所以你应该写:
SELECT Person.PersonID AS Expr1, [Tobacco Query].PersonID
FROM Person LEFT JOIN [Tobacco Query] ON [Tobacco Query].PersonID = Person.PersonID
WHERE [Tobacco Query].PersonID IS NULL;
除了在[烟草查询]中找不到匹配记录的记录之外,这将删除所有记录,这些记录应该是您正在寻找的记录。
编辑:首先是右边的人员表...左边有一个LEFT JOIN,它应该在左边,因为那是你想要数据的表。