Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Join von 6 Tabellen

Seit appointmnent_id ist der Primärschlüssel von Appointment , diese Tabelle hat ein 1:N Beziehung zu allen 6 Tabellen.

Dies ist der Fall, wenn das Verbinden mit diesen 6 Tabellen mehrere Zeilen mit doppelten Daten erzeugt , es ist wie ein Cartesian Product . Zum Beispiel, wenn (für nur eine id=46 ), gibt es:

  • 3 Zeilen für PatientInvestigation
  • 6 Zeilen für PatientTreatmentMedicine
  • 4 Zeilen für PatientFindings
  • 2 Zeilen für PatientDiagnosis
  • 2 Zeilen für PatientCC
  • 5 Zeilen für PatientAdvice

Sie erhalten 3x6x4x2x2x5 =1440 Zeilen in der Ergebnismenge, während Sie nur 3+6+4+2+2+5 (+1) =23 benötigen Reihen. Das sind 60-mal mehr Zeilen (und viel mehr Spalten) als nötig.

Es ist besser, wenn Sie 6 separate Abfragen mit einem JOIN zu einer (der 6) Tabellen in jeder Abfrage durchführen (und eine weitere Abfrage, um die Daten aus der Basistabelle Appointment zu erhalten ). Und kombiniere die Ergebnisse der 6 Abfragen im Anwendungscode . Beispiel für die Basisabfrage und die Abfrage, die mit der ersten Tabelle verknüpft werden soll:

Basistisch :

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

Join-1 to 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