2012-01-08 10 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; 

は、あなたがより良い/代替クエリ(Oracleのスタイル)を提案することができます(P1、P6)と同様に、[重複したペアを解消します( p6、p1)]?

+1

明瞭な対称破壊条件は 'p1.p_id wildplasser

+0

他の方法は....?さらに、@Andomar、この状態の起源は何ですか?舌の頬のようなソリューション...パッチワークのように見えます。 –

答えて

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を選択し、同じ医師

によってtrated患者のリストをretun treatment.p_id、治療からtreatment.d_idますがtreatment.d_id

でtreatment.p_id = patient.p_idグループに患者を参加します
関連する問題