Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL juntando 6 tabelas


Desde appointmnent_id é a chave primária de Appointment , esta tabela tem um 1:N relacionamento com todas as 6 tabelas.

Este é o caso em que a junção a essas 6 tabelas produzirá várias linhas com dados duplicados , é como um Cartesian Product . Por exemplo se (para apenas um id=46 ), existem:
  • 3 linhas para PatientInvestigation
  • 6 linhas para PatientTreatmentMedicine
  • 4 linhas para PatientFindings
  • 2 linhas para PatientDiagnosis
  • 2 linhas para PatientCC
  • 5 linhas para PatientAdvice

você terá 3x6x4x2x2x5 =1440 linhas no conjunto de resultados, enquanto você só precisa de 3+6+4+2+2+5 (+1) =23 linhas. Isso é 60 vezes mais linhas (e com muito mais colunas) do que o necessário.

É melhor se você fizer 6 consultas separadas com um JOIN para uma (das 6) tabelas em cada consulta (e mais uma consulta para obter os dados da tabela base Appointment ). E combine os resultados das 6 consultas no código do aplicativo . Exemplo para a consulta base e a consulta para unir à primeira tabela:

Tabela base :
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