编写一个查询来显示由同一位医生治疗的不同患者对。
下表列出:
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)]?
最佳答案
要搜索由同一位医生治疗的所有其他患者,请将治疗表与其本身连接起来。您可以使用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
是同一对。其中之一将被 <
过滤掉情况。
关于sql - 根据连接中的某些条件显示对的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776958/