Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL joignant 6 tables

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