0

例:

7.同じ日に同じ専門の2人の異なる医師を訪問した患者を見つけます。

   SELECT       p.pid , d.speciality, v.date
   FROM         Patient p
   JOIN         Visits v ON v.pid = p.pid
   JOIN         Doctors d ON d.did = v.did
   GROUP BY     p.pname, d.speciality, v.date
   HAVING   COUNT(DISTINCT d.did) = 2

このための合法的なRAをどのように記述しますか?

基本的に、RAでのGroupByとHaving句の同等性は何ですか?

同じことが尋ねられ、ここで答えられませんでした

4

1 に答える 1

4

SQLを実際に試して変換する必要はありません。質問を反映すると、RAソリューションも得られます。

「同じ日に同じ専門の2人の異なる医師を訪問した患者を見つけてください」

まず、患者、訪問、医師を組み合わせます

Patients x Visits x Doctors

2回の訪問と2人の医師がいるため、VisitsとDoctorsのテーブルの別のインスタンスが必要です。それらをそのまま使用することはできません。そうしないと、それらを区別できなくなります。したがって、名前を変更し\rhoます。

Patients x \rho_V1(Visits) x \rho_D1(Doctors) x \rho_V2(Visits) x \rho_D2(Doctors)

次に、「一致する」組み合わせを選択する必要があります

\sigma_{Patients.pid = V1.pid /\ 
        Patients.pid = V2.pid /\ 
        V1.date = V2.date /\ 
        V1.did = D1.did /\ 
        V2.did = D2.did /\
        D1.did != D2.did /\
        D1.speciality = D2.speciality}
 (Patients x \rho_V1(Visits) x \rho_D1(Doctors)  x 
             \rho_V2(Visits) x \rho_D2(Doctors))

次に、患者を見つける必要があります。pid

\pi_{Patients.pid} 
(\sigma_{Patients.pid = V1.pid /\ 
        Patients.pid = V2.pid /\ 
        V1.date = V2.date /\ 
        V1.did = D1.did /\ 
        V2.did = D2.did /\
        D1.did != D2.did /\
        D1.speciality = D2.speciality}
 (Patients x \rho_V1(Visits) x \rho_D1(Doctors)  x 
             \rho_V2(Visits) x \rho_D2(Doctors)))

このようにして、同じ専門分野の少なくとも2人の異なる医師を同じ日に訪問した患者を見つけました。正確に2人の医師を訪問した患者を見つける必要がある場合は、正確に2 =少なくとも2-少なくとも3、つまり、

\pi_{Patients.pid} 
(\sigma_{Patients.pid = V1.pid /\ 
        Patients.pid = V2.pid /\ 
        V1.date = V2.date /\ 
        V1.did = D1.did /\ 
        V2.did = D2.did /\
        D1.did != D2.did /\
        D1.speciality = D2.speciality}
 (Patients x \rho_V1(Visits) x \rho_D1(Doctors)  x 
             \rho_V2(Visits) x \rho_D2(Doctors)))
-
\pi_{Patients.pid} 
(\sigma_{Patients.pid = V1.pid /\ 
        Patients.pid = V2.pid /\ 
        Paitents.pid = V3.pid /\
        V1.date = V2.date /\ 
        V2.date = V3.date /\
        V1.did = D1.did /\ 
        V2.did = D2.did /\
        V3.did = D3.did /\
        D1.did != D2.did /\
        D1.did != D3.did /\
        D2.did != D3.did /\
        D1.speciality = D2.speciality /\
        D2.speciality = D3.speciality}
 (Patients x \rho_V1(Visits) x \rho_D1(Doctors)  x 
             \rho_V2(Visits) x \rho_D2(Doctors)  x
             \rho_V3(Visits) x \rho_D3(Doctors) ))
于 2012-05-06T09:12:54.800 に答える