我在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"));
答案 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(一个用于'感染',一个用于'压疮')。