SELECT patient.id
, patient.name
FROM patient,patientdx
WHERE patient.id = patientdx.id
AND disease IN ('HIV', 'DM')
GROUP BY id HAVING COUNT(DISTINCT disease) = 2;
问题是COUNT(DISTINCT )
,97版本不支持。是否有其他查询来获得相同的结果?
答案 0 :(得分:0)
我认为这可能适合你。
...
HAVING
MAX(disease) = 'HIV' AND MIN(disease) = 'DM'
AND MAX(IIF(disease > 'DM' AND disease < 'HIV', 1, 0)) = 0
翻译:按字母顺序排列的最大disease
是艾滋病毒,最低的是DM。另一个表达式确保它们之间没有任何内容。
编辑:我没有注意到你已经将disease
条款WHERE
限制为两个有趣的人。因此,我可以看到您使用HAVING
的目的是确保患者同时具有这两种诊断。这使得最后一个条件在您的情况下是多余的,但将来可能是一个方便的技巧。重申,我认为这个更简单的条件对你来说已经足够了。
HAVING MAX(disease) = 'HIV' AND MIN(disease) = 'DM'
你当然可以尝试第一个,让我们/我知道Access 97是否可以处理它。
答案 1 :(得分:0)
您应该学会使用正确的join
语法。但是,您可以使用IN
:
SELECT patient.*
FROM patient
WHERE patient.id IN (SELECT id FROM patientdx WHERE disease = 'HIV') AND
patient.id IN (SELECT id FROM patientdx WHERE disease = 'DM');
虽然有多种方法可以使聚合查询起作用,但这提供了聚合查询的替代方法。