2013-03-17 2 views
0

У меня есть 3 стола для больниц, с которыми у меня возникают проблемы.SQL Объединение таблиц и отображение данных

http://postimage.org/image/hi2c4yrrf/

Прием Содержит patientid, admitteddate, dischargeddate и подопечного.
Врач врач, фамилия, имя и подопечный.
Ward wardid, имя и консультант (doctorid)

Я был в состоянии сделать много чего учебник просит меня, но я не могу найти какие-либо указаний или ответы о том, как сделать следующее:

Я хочу найти фамилии врачей, которые не используются пациентом, а также отображать фамилии тех, которые используются пациентом. Я предполагаю, что присоединяюсь к столам «Доктор и Уорд», а также допущение, чтобы показать, что доктор 530 не используется ни одним пациентом.

Затем я должен иметь И, чтобы отображать фамилии врачей, которые соответствуют консультанту в таблице прихода.

Чтобы найти подробную информацию о врачах, которые не лечили пациентов, я присоединяюсь к Доктору с Уордом и показываю детали тех, которые не находятся в колонке консультантов. Я понимаю эту теорию, я просто не уверен, как правильно ее обработать в SQL.

Я приветствую любое обсуждение или помощь в ответах, так как я бы очень хотел понять этот шаг.

+2

Здесь слишком много вопросов для одного сообщения. Разделите это на более мелкие проблемы. – bernie

ответ

0

Врачи, которые не используются пациентом

select distinct d.number, d.surname 
from doctor d 
left join ward w on w.consultant = d.number 
left join admission ad on ad.ward = w.code 
left join patient p on p.code = ad.patient 
where p.code is null 

Врачи, которые используются пациентом

select distinct d.number, d.surname 
from doctor d 
join ward w on w.consultant = d.number 
join admission ad on ad.ward = w.code 
join patient p on p.code = ad.patient 

схемы (для теста):

select * into patient 
from (
    select 'A102' [code], 'Harris' [surname], 'Lucy' [lastname] union all 
    select 'B372', 'Rossini', 'Peter' union all 
    select 'B534', 'Johnson', 'Nadia' union all 
    select 'B444', 'Johnson', 'Juigi' union all 
    select 'S555', 'Rose', 'Jean') as p 

select * into admission 
from (
    select 'A102' [patient], null [admitted], NULL [discharged], 'A' [ward] union all 
    select 'A102', null, NULL, 'A' union all 
    select 'S555', null, NULL, 'B' union all 
    select 'B444', null, NULL, 'B' union all 
    select 'S555', null, NULL, 'A') as ad 

select * into doctor 
from (
    select 203 [number], 'Black' [surname], 'Peter' [firstname], 'A' [ward] union all 
    select 574, 'Blis', 'Mavis', 'B' union all 
    select 461, 'Boyne', 'Steve', 'B' union all 
    select 530, 'Clark', 'Nicola', 'C' union all 
    select 405, 'Mizzi', 'Nicola', 'A' union all 
    select 501, 'Mount', 'Mavis', 'A') as d 

select * into ward 
from (
    select 'A' [code], 'Surgical' [name], 203 [consultant] union all 
    select 'B', 'Paediatric', 574 union all 
    select 'C', 'Medical', 530) as w 
Смежные вопросы