2016-08-02 3 views
0

У меня 7 таблицы подобноефильтр строка таблицы-1 на основе значения таблицы 2 столбца, не прикрепленного между таблицей 1 и таблицей -2

клиника

clinic_id  clinic_name emailId    address 

Один к одному отображение между клиникой и медсестра таблицы

Медсестра

nurse_id nurse_name nurse_emailid  clinic_id   

Доктор

doctor_id doctor_name doctor_email 

многие ко многим Mapping между клиникой и врачом

Doctor_clinic

doctor_clinic_id doctor_id clinic_id 

Пациент

pattient_id patient_name  address 

Многие ко многим Mapping между patinet и doctor_clinic

Doctor_clinic_patient

patient_dotor_id doctor_clinic_id patient_id 

Один ко многим Mapping между doctor_clinic_patient и doctor_patient_appointment

Doctor_patient_appointment

 appointment_id appointment_time appointment_status patient_doctor_id 

appointment_status имеют три ценностно 'в ожидании', 'отменен', 'завершена'

Таким образом, senario начинается от

  1. Выберите clinic_id из nurse_id (медсестра таблицы)

  2. затем на основном clinic_id, я хочу, чтобы выбрать doctor_clinic_id (doctor_clinic таблицу)

  3. затем на основе doctor_clinic_id, я хочу выбрать patient_id

  4. затем на основном patient_id, я хочу, чтобы выбрать детали пациента сформировать таблицу пациента

проблема заключается в том, что я хочу выбрать только тех пациентов из таблицы пациентов, у которых назначена встреча в таблице назначения статуса «ожидающий»

Я выполнил следующий запрос, который отлично работает, выведите строку пациента из db.Но я хочу, чтобы фильтровать этот результат пациента на основании статуса назначения

Запрос

Select * from patient where patient.patient_id in 

(select doctor_patient.patient_id from doctor_patient where 

doctor_patient.doctor_clinic_id in 
(select doctor_clinic.doctor_clinic_id from doctor_clinic where 

doctor_clinic.clinic_id in 
(select nurse.clinic_id from nurse where nurse_id = 6))) 
+0

Это сложная схема. Вы еще что-нибудь пробовали? –

+0

Да, я сделал запрос, который нашел данные о пациенте, но я не знаю, как фильтровать на основе назначения_status –

+0

@TimBiegeleisen. Я отправил запрос. Пожалуйста, дайте любое предложение. –

ответ

0

Я думаю мультипликатор JOIN будет работать здесь:

SELECT patients.* FROM patients JOIN (
    SELECT DISTINCT(p.patient_id) as pat_id FROM clinic c 
    JOIN doctor_clinic dc ON c.clinic_id = dc.clinic_id 
    JOIN doctor_clinic_patient dcp ON dcp.doctor_clinic_id = dc.doctor_clinic_id 
    JOIN patient p ON p.patient_id = dcp.patient_id 
    JOIN doctor_patient_appointment dpa ON dcp.patient_doctor_id = dpa.patient_doctor_id 
    WHERE dpa.status = 'pending' 
) tmp ON tmp.pat_id = patients.patient_id 
+0

Я отправляю запрос в вопросе, можете ли вы это увидеть, пожалуйста. Дайте любое предложение, если потребуется –

+0

Вы попробовали мой ответ? Кажется, это соответствует вашим потребностям. Кстати: я не совсем понимаю ваш вопрос, потому что он отфильтровывает результаты у медсестер, а не по встречам (для которых вы просили) ... – Kleskowy

+0

да, вы правы, но как я могу применить этот фильтр назначения мой запрос , Большое спасибо за быстрый ответ и дайте решение такой сложной вещи. –

Смежные вопросы