检索连接表中没有匹配行的记录

时间:2015-03-30 09:24:16

标签: mysql sql count aggregate-functions

我有两个名为doctorpatient

的表

这是我的doctor

enter image description here

这是我的patient

enter image description here

首先,我想检索医生ID列表以及为每位医生预约一次或多次预约的次数

我可以使用以下查询

来完成
Select d.doctor_id, count(p.patient_id)
from patient p, doctor d
where d.doctor_id=p.registered_with
group by d.doctor_id;

结果:

enter image description here

但是现在我需要修改以前的查询以包括任何没有约会的医生(例如:身份证号为51的医生没有任何约会。我想将他包括在上述结果中)

我该怎么做?

PS:如果标题有误导性,有人请为我重新纠正

3 个答案:

答案 0 :(得分:2)

你在做implicit join 您需要使用left join作为

Select 
d.doctor_id, 
coalesce(count(p.patient_id),0) as `patient_count`
from  doctor d
left join patient p on d.doctor_id=p.registered_with
group by d.doctor_id;

答案 1 :(得分:1)

您可以使用right outer join

执行此操作
Select d.doctor_id, count(p.patient_id)
from patient p right outer join doctor d
on d.doctor_id=p.registered_with
group by d.doctor_id;

答案 2 :(得分:0)

我无权发表评论...... 基本上这是 abhik-chakraborty

的轻微变化解决方案
    select 
    d.doctor_id,
    isnull(count(patient_id),0) no_of_appointments
    from doctor d
    left outer join patient p
    on
    p.registered_with = d.doctor_id
    group by d.doctor_id;