我有这个问题:
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
而不使用计数
答案 0 :(得分: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
)
)
换句话说,选择没有咨询医生的所有患者。至少它应该给你这个想法。
答案 1 :(得分: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,则患者不会访问该医生。