基于连接中的某些条件显示对的查询

时间:2012-01-08 11:01:03

标签: sql oracle join

写一个查询,以显示由同一位医生治疗的不同患者对 存在以下表格:

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 个答案:

答案 0 :(得分: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, MaryMary, Join成对。其中一个将被<条件过滤掉。

答案 1 :(得分:0)

这将恢复由同一位医生交易的患者名单

从治疗内部加入患者中选择不同的patient.p_name,treatment.p_id,treatment.d_id治疗.p_id = patient.p_id group by treatment.d_id