sql >> Database >  >> RDS >> Sqlserver

SQL die 6 tabellen samenvoegt

Sinds appointmnent_id is de primaire sleutel van Appointment , deze tabel heeft een 1:N relatie met alle 6 tabellen.

Dit is het geval wanneer het toevoegen aan deze 6 tabellen meerdere rijen met dubbele gegevens oplevert , het is als een Cartesian Product . Bijvoorbeeld als (voor slechts één id=46 ), zijn er:

  • 3 rijen voor PatientInvestigation
  • 6 rijen voor PatientTreatmentMedicine
  • 4 rijen voor PatientFindings
  • 2 rijen voor PatientDiagnosis
  • 2 rijen voor PatientCC
  • 5 rijen voor PatientAdvice

je krijgt 3x6x4x2x2x5 =1440 rijen in de resultatenset, terwijl je alleen 3+6+4+2+2+5 (+1) =23 nodig hebt rijen. Dat zijn 60 keer meer rijen (en met veel meer kolommen) dan nodig.

Het is beter als u 6 afzonderlijke zoekopdrachten doet met één JOIN bij één (van de 6) tabellen in elke zoekopdracht (en nog een vraag om de gegevens uit de basistabel te halen Appointment ). En combineer de resultaten van de 6 zoekopdrachten in de applicatiecode . Voorbeeld voor de basisquery en de query om samen te voegen met de eerste tabel:

Basistafel :

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


  1. MySQL min/max voor DUBBEL type

  2. Laatst ingevoegde id teruggeven vanuit MySql

  3. Mysql-selectiequery voor het verkrijgen van het huidige gebruikersbericht en het gevolgde bericht van een vriend

  4. Wat is sneller:meerdere enkele INSERT's of één INSERT met meerdere rijen?