2015-03-30 3 views
1

У меня есть две таблицы с именами doctor и patientПолучение записей соответствующих строк в объединенной таблице

Вот мой doctor стол

enter image description here

Вот мой patient стол

enter image description here

Сначала я хочу редактор, чтобы получить список идентификаторов врача вместе с количеством назначений, сделанных для каждого врача с одним или несколькими назначениями

я могу сделать это с ниже запроса,

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: Если название вводит в заблуждение, кто-то пожалуйста, повторно правильно это для меня

+2

использование * внешнее соединение *, такие как 'RIGHT JOIN'. например, «от пациента». ПРАВОЙ JOIN doctor d ON d.doctor_id = p.registered_with' –

ответ

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; 
+0

Спасибо. Это сработало :) –

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; 
+0

Выдает сообщение об ошибке «Синтаксическая ошибка, неожиданно, где» –

+0

@ CR7 yup отредактировал это. –

+0

Теперь он работает. Благодаря :) –

0

Мне не удалось найти комментарий ... В основном это небольшое изменение решения abhik-Чакраборти

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;