1

我有这个查询:

select pa.id,pa.name 
from patients pa 
where (select count(distinct co.doctorID) 
       from consults co 
       where co.patientID=pa.id) = (select count(do.id) 
                                    from doctors do);

我在其中选择了咨询过所有医生的患者。

我正在计算不同医生的数量,看看是否等于医生总数。

但是我怎么能用exists和/或in不使用计数来做到这一点

4

2 回答 2

2

您可以使用嵌套NOT EXISTS

select pa.id,pa.name 
from patients pa 
where NOT EXISTS
(
   select 1 FROM doctors do
   where NOT EXISTS
   (
      SELECT 1 FROM consults co
      WHERE co.doctorID=do.id
      AND pa.id=co.patientID
   )
)

换句话说,选择所有没有咨询过医生的患者。至少它应该给你这个想法。

于 2013-01-11T23:36:20.477 回答
1

我认为您可以尝试更好的解决方案NOT EXISTS,根本不需要计数:

SELCT pa.id,pa.name 
FROM patients pa 
WHERE NOT EXISTS (SELECT *  
                  FROM doctors do 
                       LEFT JOIN consults co  
                             ON co.doctorID ON do.id
                  WHERE co.patientID=pa.id 
                      AND co.doctorID IS NULL

    )

在子查询中,我们获取所有医生并查看他们是否都为当前患者咨询过。如果 co.doctorID 为 NULL,则患者未访问该医生。

于 2013-01-11T23:47:12.123 回答