Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL свързване на 6 таблици

От appointmnent_id е първичният ключ на Appointment , тази таблица има 1:N връзка с всичките 6 таблици.

Това е случаят, когато присъединяването към тези 6 таблици ще произведе множество редове с дублирани данни , това е като Cartesian Product . Например ако (само за един id=46 ), има:

  • 3 реда за PatientInvestigation
  • 6 реда за PatientTreatmentMedicine
  • 4 реда за PatientFindings
  • 2 реда за PatientDiagnosis
  • 2 реда за PatientCC
  • 5 реда за PatientAdvice

ще получите 3x6x4x2x2x5 =1440 редове в набора с резултати, докато имате нужда само от 3+6+4+2+2+5 (+1) =23 редове. Това е 60 пъти повече редове (и с много повече колони), отколкото е необходимо.

По-добре е да направите 6 отделни заявки с едно JOIN към една (от 6-те) таблици във всяка заявка (и още една заявка за получаване на данните от основната таблица Appointment ). И комбинирайте резултатите от 6-те заявки в кода на приложението . Пример за основната заявка и заявката за присъединяване към първата таблица:

Базова маса :

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

Присъединете се-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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Търся програма за преглед на файлове за SQL Transaction Log file

  2. Функция AWS Lambda за свързване към SQL Server с Python

  3. UPDATE и REPLACE част от низ

  4. Как да изпълня съхранена процедура веднъж за всеки ред, върнат от заявка?

  5. Агрегация на низове през годините в SQL Server