2012-02-16 88 views
-1

表:請幫助這個SQL查詢

Doctor(doctor_id, name, address, tel, specialty) 

Patient(patient_id, name, numsecu, doctor_reference) 

Visit(doctor, patient, date_visit) 

的問題是顯示誰看到各專業醫生的病人。

我這樣做,但我不知道如何檢查病人看過每一位專科醫生。

select distinct p.nom, m.specialite 
from patient p, visite v, medecin m 
where p.patient_id = v.patient 
and v.medecin = m.medecin_id 
group by p.nom, m.specialite 
+11

您有12個問題,並沒有被接受。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work請參與社區。 – 2012-02-16 22:33:29

+1

首先和formost,不要再使用那個可怕的隱式語法。它是一個SQL反模式! – HLGEM 2012-02-16 22:40:42

+0

@HLGEM你能告訴我你的意思是反模式嗎?什麼語法? – 2012-02-16 23:10:33

回答

5

做了一個有點假設這裏「專科醫生」通過在medecin表中的非空specialite列標識。

編輯:在主要查詢中添加JOIN到medecin,以過濾僅對專業醫生的訪問。

SELECT p.nom 
    FROM patient p 
     INNER JOIN visite v 
      ON p.patient_id = v.patient 
     INNER JOIN medicin m 
      ON v.medecin = m.medecin_id 
    WHERE m.specialite IS NOT NULL 
    GROUP BY p.nom 
    HAVING COUNT(DISTINCT m.medecin_id) = (SELECT COUNT(*) 
               FROM medecin 
               WHERE specialite IS NOT NULL) 
+0

如果將問題分解成若干部分,它有助於解決這些問題。首先你需要知道不同專業的人數。然後你需要知道病人訪問的專科數。那麼你需要比較這兩個數字,看看它們是否匹配。這基本上是喬在這裏爲你做的。 – HLGEM 2012-02-16 22:44:10

+0

謝謝喬,但我不知道如何檢查病人訪問過的專科數量。 – user702160 2012-02-17 12:09:06