sql >> Databasteknik >  >> RDS >> Sqlserver

SQL sammanfogar 6 tabeller

Sedan appointmnent_id är den primära nyckeln för Appointment , den här tabellen har en 1:N relation med alla 6 tabellerna.

Detta är fallet när anslutning till dessa 6 tabeller ger flera rader med dubbletter av data , det är som en Cartesian Product . Till exempel if (för endast en id=46 ), det finns:

  • 3 rader för PatientInvestigation
  • 6 rader för PatientTreatmentMedicine
  • 4 rader för PatientFindings
  • 2 rader för PatientDiagnosis
  • 2 rader för PatientCC
  • 5 rader för PatientAdvice

du får 3x6x4x2x2x5 =1440 rader i resultatuppsättningen, medan du bara behöver 3+6+4+2+2+5 (+1) =23 rader. Det är 60 gånger fler rader (och med många fler kolumner) än vad som behövs.

Det är bättre om du gör 6 separata frågor med en JOIN till en (av de 6) tabellerna i varje fråga (och ytterligare en fråga för att hämta data från bastabellen Appointment ). Och kombinera resultaten av de 6 frågorna i applikationskoden . Exempel på basfrågan och frågan för att ansluta till den första tabellen:

Bastabell :

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

Gå med-1 till 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. MYSQL välj slumpmässigt av var och en av kategorierna

  2. Kolumnantal matchar inte värderäkning på rad 1

  3. mysql-fråga join/inner join

  4. Trigger som infogar rad i loggtabellen vid infogning eller borttagning i en persontabell kompilerad med fel