Поскольку appointmnent_id
является первичным ключом Appointment
, эта таблица имеет отношение 1:N
ко всем 6 таблицам.
В этом случае объединение этих 6 таблиц приведет к несколько строк с повторяющимися данными , это как Cartesian Product
.Например, если (только для одного id=46
), есть:
- 3 строки для
PatientInvestigation
- 6 строк для
PatientTreatmentMedicine
- 4 строкидля
PatientFindings
- 2 строки для
PatientDiagnosis
- 2 строки для
PatientCC
- 5 строк для
PatientAdvice
васВы получите 3x6x4x2x2x5 = 1440
строк в наборе результатов, в то время как вам нужно только 3 + 6 + 4 + 2 + 2 + 5 (+1) = 23
строк,Это в 60 раз больше строк (и с большим количеством столбцов), чем необходимо.
Лучше, если вы сделаете 6 отдельных запросов с одним JOIN для одной (из 6) таблиц в каждом запросе (и еще один запрос для получения данных из базовой таблицы Appointment
).И объединяет результаты 6 запросов в коде приложения .Пример базового запроса и запроса на присоединение к первой таблице:
Базовая таблица :
SELECT
a.appointment_id,
a.patient_id
FROM
Appointment AS a
WHERE
a.appointment_id = 46
Присоединение-1 к PatientInvestigation :
SELECT
pi.investigation_name,
pi.investigation_id
FROM
Appointment AS a
JOIN
PatientInvestigation AS pi
ON pi.appointment_id = a.appointment_id
WHERE
a.appointment_id = 46