检索在联接 table 中没有匹配行的记录

Retrieve records with no matching rows in joined table

我有两个 table 名为 doctorpatient

这是我的doctortable

这是我的patienttable

首先,我想检索医生 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;

结果:

但现在我需要修改之前的查询以包括任何没有预约的医生(例如:id 为 51 的医生没有任何预约。我想将他包括在上面的结果中)

我该怎么做?

PS: 如果标题有误导性,请有人re-correct帮我

你正在做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;

你可以用 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;

我没有权限发表评论... 基本上这是 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;