写一个查询,以显示由同一位医生治疗的不同患者对 存在以下表格:
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)]?
答案 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, Mary
与Mary, Join
成对。其中一个将被<
条件过滤掉。
答案 1 :(得分:0)
这将恢复由同一位医生交易的患者名单
从治疗内部加入患者中选择不同的patient.p_name,treatment.p_id,treatment.d_id治疗.p_id = patient.p_id group by treatment.d_id