sql >> Base de Datos >  >> RDS >> Sqlserver

SQL uniendo 6 tablas

Desde appointmnent_id es la clave principal de Appointment , esta tabla tiene un 1:N relación con las 6 tablas.

Este es el caso donde unirse a estas 6 tablas producirá múltiples filas con datos duplicados , es como un Cartesian Product . Por ejemplo, si (solo para un id=46 ), hay:

  • 3 filas para PatientInvestigation
  • 6 filas para PatientTreatmentMedicine
  • 4 filas para PatientFindings
  • 2 filas para PatientDiagnosis
  • 2 filas para PatientCC
  • 5 filas para PatientAdvice

obtendrás 3x6x4x2x2x5 =1440 filas en el conjunto de resultados, mientras que solo necesita 3+6+4+2+2+5 (+1) =23 filas Eso es 60 veces más filas (y con muchas más columnas) de las necesarias.

Es mejor si haces 6 consultas separadas con un JOIN a una (de las 6) tablas en cada consulta (y una consulta más para obtener los datos de la tabla base Appointment ). Y combina los resultados de las 6 consultas en el código de la aplicación . Ejemplo para la consulta base y la consulta para unir a la primera tabla:

Mesa base :

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

Unirse-1 a Investigación de Pacientes :

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