2012-01-08 66 views
2

编写查询以显示由同一位医生治疗的不同患者对。
下表是存在的:根据连接中的某些条件显示对的查询

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; 

您能否提供一个更好的/替代查询(甲骨文的风格),消除了重复对[像(P1,P6)和( P6,P1)?

+1

明显的对称性破坏条件是“p1.p_id wildplasser 2012-01-08 11:12:36

+0

任何其他方法....?另外,@Andomar,这种情况的起源是什么。看起来更像是一种舌尖的解决方案......拼凑而成。 – 2012-01-08 11:44:59

回答

4

要搜索由同一位医生治疗的所有其他患者,请自行加入治疗表。您可以使用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

这将retun由同一个医生

trated患者名单从治疗选择不同patient.p_name,treatment.p_id,treatment.d_id通过treatment.d_id

上treatment.p_id = patient.p_id组内加入病人
相关问题