在查询Access 2007中返回emp#NOT列表

时间:2011-07-22 19:47:11

标签: sql database ms-access

列出了人们可以遇到的问题清单。这些人被一个号码所识别。这些人可能有任何问题(通常是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;

1 个答案:

答案 0 :(得分:1)

我对Access SQL方言并不十分了解,但您想要的是LEFT JOIN,而不是INNER JOINLEFT 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,它应该在左边,因为那是你想要数据的表。