sql >> Databáze >  >> RDS >> Sqlserver

SQL spojující 6 tabulek

Od appointmnent_id je primární klíč Appointment , tato tabulka má 1:N vztah se všemi 6 tabulkami.

To je případ, kdy spojením s těmito 6 tabulkami vznikne více řádků s duplicitními daty , je to jako Cartesian Product . Například if (pouze pro jeden id=46 ), existují:

  • 3 řádky pro PatientInvestigation
  • 6 řádků pro PatientTreatmentMedicine
  • 4 řádky pro PatientFindings
  • 2 řádky pro PatientDiagnosis
  • 2 řádky pro PatientCC
  • 5 řádků pro PatientAdvice

získáte 3x6x4x2x2x5 =1440 řádků ve výsledné sadě, zatímco potřebujete pouze 3+6+4+2+2+5 (+1) =23 řádky. To je 60krát více řádků (a mnohem více sloupců), než je potřeba.

Je lepší, když uděláte 6 samostatných dotazů s jedním JOIN do jedné (ze 6) tabulek v každém dotazu (a ještě jeden dotaz na získání dat ze základní tabulky Appointment ). A zkombinujte výsledky 6 dotazů v kódu aplikace . Příklad pro základní dotaz a dotaz pro připojení k první tabulce:

Základní tabulka :

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

Připojte se 1 k 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. ScalikeJDBC:Fond připojení ještě není inicializován.(name:'default)

  2. PHP/MySQL:Načítání záznamů posledních *celých* týdnů

  3. Laravel InvalidArgumentException v Carbon.php řádek 425:Koncová data s SQL databází

  4. Jak ignorovat otazník jako zástupný symbol při použití PDO s PostgreSQL