2012-02-16 2 views
-1

таблицы:Пожалуйста, помогите этому запросу будет

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 Пожалуйста, участвуйте в сообществе. –

+1

Первый и формост, никогда не используйте этот ужасный неявный синтаксис снова. Это антипаттерн SQL! – HLGEM

+0

@HLGEM вы можете рассказать мне, что вы подразумеваете под антипаттерном? какой синтаксис? –

ответ

5

Сделано немного предположения, что здесь «специализированные врачи» идентифицируются ненулевым specialite столбца в medecin таблице.

EDIT: Добавлено JOIN to 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

Это помогает решить эти проблемы, если вы нарушите проблему на части. Сначала вам нужно знать количество специальных блюд. Затем вам нужно знать количество специальностей, которые посетил пациент. Затем вам нужно сравнить два числа и посмотреть, совпадают ли они. Thuis в основном, что Джо сделал здесь для вас. – HLGEM

+0

Спасибо Джо, но я не знаю, как проверить количество специальностей, которые посетил пациент. – user702160