Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL che unisce 6 tabelle

Da appointmnent_id è la chiave primaria di Appointment , questa tabella ha un 1:N relazione con tutte e 6 le tabelle.

Questo è il caso in cui l'unione a queste 6 tabelle produrrà più righe con dati duplicati , è come un Cartesian Product . Ad esempio se (per un solo id=46 ), ci sono:

  • 3 righe per PatientInvestigation
  • 6 righe per PatientTreatmentMedicine
  • 4 righe per PatientFindings
  • 2 righe per PatientDiagnosis
  • 2 righe per PatientCC
  • 5 righe per PatientAdvice

otterrai 3x6x4x2x2x5 =1440 righe nel set di risultati, mentre hai solo bisogno di 3+6+4+2+2+5 (+1) =23 righe. Ovvero 60 volte più righe (e con molte più colonne) del necessario.

È meglio se esegui 6 query separate con un UNISCITI a una (delle 6) tabelle in ogni query (e un'altra query per ottenere i dati dalla tabella di base Appointment ). E combina i risultati delle 6 query nel codice dell'applicazione . Esempio per la query di base e per la query da unire alla prima tabella:

Tavolo base :

SELECT 
    a.appointment_id, 
    a.patient_id
FROM 
    Appointment AS a
WHERE
    a.appointment_id = 46

Unisciti a 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