Depuis appointmnent_id
est la clé primaire de Appointment
, cette table a un 1:N
relation avec les 6 tables.
C'est le cas où la jointure à ces 6 tables produira plusieurs lignes avec des données en double , c'est comme un Cartesian Product
. Par exemple si (pour un seul id=46
), il y a :
- 3 lignes pour
PatientInvestigation
- 6 lignes pour
PatientTreatmentMedicine
- 4 lignes pour
PatientFindings
- 2 lignes pour
PatientDiagnosis
- 2 lignes pour
PatientCC
- 5 lignes pour
PatientAdvice
vous obtiendrez 3x6x4x2x2x5 =1440
lignes dans le jeu de résultats, alors que vous n'avez besoin que de 3+6+4+2+2+5 (+1) =23
Lignes. C'est 60 fois plus de lignes (et avec beaucoup plus de colonnes) que nécessaire.
C'est mieux si vous faites 6 requêtes séparées avec un JOIN à une (des 6) tables dans chaque requête (et une autre requête pour obtenir les données de la table de base Appointment
). Et combiner les résultats des 6 requêtes dans le code de l'application . Exemple pour la requête de base et la requête à joindre à la première table :
Table de base :
SELECT
a.appointment_id,
a.patient_id
FROM
Appointment AS a
WHERE
a.appointment_id = 46
Join-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