Access 2007查询错误地返回零记录

时间:2011-07-19 12:56:00

标签: sql ms-access

我在Access中有一个小型数据库,除了以下问题外,它运行良好。数据库设计正确,任何其他100个查询我工作正常。我试图找到正确的SQL来返回正确的记录。肯定有记录符合(((tblComorbidity.comorbidityexplanation)="感染"和(tblComorbidity.comorbidityexplanation)="压疮"));部分,但由于某种原因,它什么都不返回。有什么建议?谢谢

    SELECT DISTINCT Person.PersonID, tblComorbidity.comorbidityexplanation
    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 
(((tblComorbidity.comorbidityexplanation)="infection" And (tblComorbidity.comorbidityexplanation)="pressure sores"));

3 个答案:

答案 0 :(得分:6)

您的SQL正在尝试获取所有tblComorbidity记录,其中包含“感染”和“压疮”的解释。这是不可能的,因为ONE tblComorbidity记录只有一个解释。

你真正想要的是得到所有人,其中存在一个带有解释=“感染”的ONE tblComorbidity记录,而另一个tblComorbidity记录带有explain =“pressure sores”。这听起来很相似,但它有所不同,需要以不同的方式完成。

像下面的SQL应该做你想做的事情:

SELECT DISTINCT Person.PersonID
  FROM ((((Person INNER JOIN tblComorbidityPerson AS InfPers ON Person.PersonID = InfPers.PersonID)
          INNER JOIN tblComorbidity AS Inf ON InfPers.comorbidityFK = Inf.ID)
         INNER JOIN  tblComorbidityPerson AS SorePers ON Person.PersonID = SorePers.PersonID)
        INNER JOIN tblComorbidity AS Sore ON SorePers.comorbidityFK = Sore.ID)
       INNER JOIN tblKentuckyCounties ON tblKentuckyCounties.ID = Person.County
 WHERE Inf.comorbidityexplanation = "infection"
   AND Sore.comorbidityexplanation = "pressure sores";

基本上,你需要加入合并症两次(每次解释一次)。

答案 1 :(得分:3)

(((tblComorbidity.comorbidityexplanation)="infection" OR (tblComorbidity.comorbidityexplanation)="pressure sores"));

你需要一个OR,而不是AND。 tblComorbidity.comorbidityexplanation一次不能是两个不同的值。

答案 2 :(得分:2)

cularis走在正确的轨道上。在where子句之后,您需要添加

GROUP BY Person.PersonID
HAVING count(*) = 2

这将由人分组子表中的记录,并确保计数为2(一个用于'感染',一个用于'压疮')。