如何MySQL DISTINCT(COUNT)为不同的条件返回相同的行数



我继承了两个查询,用于提取不同角色代码的患者总数,问题是,它们返回的数字相同-我现在知道DISTINCT之所以会产生这种情况,是因为下面描述的表中存在一对多关系,但不确定如何向查询中添加其他条件以隔离:

查询1(理论上结果应该更小

SELECT count(DISTINCT p.patient)
FROM react r
INNER JOIN CasesR cr
ON cr.globalid = r.globalid
LEFT JOIN profile p
ON cr.globalid = p.globalid
WHERE r.desc = 'A'
AND cr.rcode = 'PS'

查询1(理论上结果应该大得多)

SELECT count(DISTINCT p.patient)
FROM react r
INNER JOIN CasesR cr
ON cr.globalid = r.globalid
LEFT JOIN profile p
ON cr.globalid = p.globalid
WHERE r.desc = 'A'

反应关键字段

 rrecordid (PK)
 globalid (Multiples in table IE: rrecordid=1,globalid=122; rrecordid=2,globalid=333)
 desc (Multiples in table IE: rrecordid=1,globalid=122; rrecordid=2,globalid=333)

案例R关键字段

 crecordid (PK)
 globalid 
 (Multiples in table IE: crecordid=1,globalid=122;crecordid=2,globalid=333)
 rcode (enum: 'A','B','C','D') 
 (multiples, globalid=122;rcode=A; globalid=122;rcode=B)

配置文件关键字段

 globalid (PK)
 patient (Multiples in table IE: globalid=1,patient=122;globalid=2,patient=122)

那么,如何更改这个查询以获得真实的计数呢?

感谢

把上面的评论放在一起。您的查询,为您提供真实计数。您的第一个查询(使用AND cr.rcode = 'PS')意味着:

查找(1)在react中具有相应记录且desc = 'A'的所有profile记录(2)在casesr中具有相应的记录且rcode = 'PS'。这些profile记录的patient字段有多少不同的值?

您的第二个查询(没有AND cr.rcode = 'PS')的意思是一样的,只是限制#2从"在casesr中具有rcode = 'PS'的相应记录"更改为"在casesr中具有相应记录"。当然,由于这是一个更宽松的限制,它永远不会产生更小的值;但它肯定可以产生相同的值。

您说您继承了这些查询;你确定写它们的人实际上并没有打算让它们通常给出相同的结果吗?patient满足第二个查询的所有要求而不满足第一个查询的轻微附加要求,这可能是非常不寻常的。

最新更新