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

SQL forbinder 6 tabeller

Siden appointmnent_id er den primære nøgle til Appointment , denne tabel har en 1:N forhold til alle 6 borde.

Dette er tilfældet, hvor tilslutning til disse 6 tabeller vil producere flere rækker med duplikerede data , det er som et Cartesian Product . For eksempel hvis (kun for én id=46 ), der er:

  • 3 rækker for PatientInvestigation
  • 6 rækker for PatientTreatmentMedicine
  • 4 rækker for PatientFindings
  • 2 rækker for PatientDiagnosis
  • 2 rækker for PatientCC
  • 5 rækker for PatientAdvice

du får 3x6x4x2x2x5 =1440 rækker i resultatsættet, mens du kun behøver 3+6+4+2+2+5 (+1) =23 rækker. Det er 60 gange flere rækker (og med mange flere kolonner) end nødvendigt.

Det er bedre, hvis du laver 6 separate forespørgsler med én JOIN til en (af de 6) tabeller i hver forespørgsel (og endnu en forespørgsel for at hente dataene fra basistabellen Appointment ). Og kombiner resultaterne af de 6 forespørgsler i applikationskoden . Eksempel på basisforespørgslen og forespørgslen til at slutte sig til den første tabel:

Basistabel :

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

Join-1 til 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. indsæt data fra en tabel til en anden i mysql

  2. MYSQL &innoDB ændrer dynamisk AUTO_INCREMENT af en tabel

  3. Hvordan opsnapper man DB-anmodninger? (MySQL)

  4. Sådan dokumenterer du din SQL Server-database