Запрос, чтобы показать пары на основе некоторого условия в соединении - PullRequest
2 голосов
/ 08 января 2012

Напишите запрос для отображения отдельной пары пациентов, которых лечит один и тот же врач.
Приведены следующие таблицы:

doctor:  
d_id  
d_name  

patient:  
p_id  
p_name  

treatment:  
d_id  
p_id  
disease  
medicine  

Запрос:

Select p1.p_name, p2.p_name
from patient p1, patient p2, treatment t1, treatment t2
where t1.d_id=t2.d_id 
AND t1.p_id<>t2.p_id
AND t1.p_id=p2.p_id
AND t2.p_id=p1.p_id;

Можете ли вы предложить лучший / альтернативный запрос (стиль Oracle), который исключает дублирующиеся пары [например, (p1, p6) и (p6, p1)]?

Ответы [ 2 ]

4 голосов
/ 08 января 2012

Чтобы найти всех остальных пациентов, которых лечил тот же врач, присоедините таблицу процедур к себе.Вы можете использовать distinct для удаления дубликатов:

SELECT   distinct p1.Name
,        p2.Name
FROM     patient p1
JOIN     treatment t1
ON       p1.id = t1.p_id
JOIN     treatment t2
ON       t1.d_id = t2.d_id -- Same doctor
         and t1.p_id < p2.p_id -- Higher patient nr
JOIN     patient p2
ON       p2.id = t2.p_id

Условие t1.p_id < p2.p_id удаляет другой вид дубликатов с заменой пациентов.John, Mary будет той же парой, что и Mary, Join.Один из них будет отфильтрован по условию <.

0 голосов
/ 08 января 2012

это приведет к повторному списку пациентов, которых лечит один и тот же врач.

Выберите отдельное имя пациента.p_id, treatment.p_id, treatment.d_id из группы внутренних пациентов, входящих в группу обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...