2012-02-16 96 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