От 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