检索在联接 table 中没有匹配行的记录
Retrieve records with no matching rows in joined table
我有两个 table 名为 doctor
和 patient
这是我的doctor
table
这是我的patient
table
首先,我想检索医生 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;
我有两个 table 名为 doctor
和 patient
这是我的doctor
table
这是我的patient
table
首先,我想检索医生 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;