2011-07-21 3 views
3

S'il vous plaît jeter un oeil à l'image.Il ya 5tables liés à nommerTable avec nommerID. Maintenant, j'ai besoin de toutes les données avec le même ID de rendez-vous ... quelle devrait être la requête de rejoindre? Quelqu'un peut-il m'aider à ce sujet? enter image description hereSQL joignant 6 tables

Voici la requête générée (J'utilise jointure externe gauche)

SELECT  dbo.Appointment.appointment_id, dbo.Appointment.patient_id, dbo.PatientInvestigaiton.investigation_name, dbo.PatientInvestigaiton.investigation_id, 
      dbo.PatientTreatmentMedicine.medecine_id, dbo.PatientTreatmentMedicine.medicinename, dbo.PatientTreatmentMedicine.medicinetype, 
      dbo.PatientFindings.finding_id, dbo.PatientFindings.finding_value, dbo.PatientAdvice.advice_description, dbo.PatientCC.cc_value, dbo.PatientCC.cc_id, 
      dbo.PatientDiagonosis.diagonosis_name, dbo.PatientDiagonosis.diagonosis_id 

FROM  dbo.Appointment LEFT OUTER JOIN 

      dbo.PatientInvestigaiton ON dbo.Appointment.appointment_id = dbo.PatientInvestigaiton.appointment_id LEFT OUTER JOIN 
      dbo.PatientTreatmentMedicine ON dbo.Appointment.appointment_id = dbo.PatientTreatmentMedicine.appointment_id LEFT OUTER JOIN 
      dbo.PatientFindings ON dbo.Appointment.appointment_id = dbo.PatientFindings.appointment_id LEFT OUTER JOIN 
      dbo.PatientDiagonosis ON dbo.Appointment.appointment_id = dbo.PatientDiagonosis.appointment_id LEFT OUTER JOIN 
      dbo.PatientCC ON dbo.Appointment.appointment_id = dbo.PatientCC.appointment_id LEFT OUTER JOIN 
      dbo.PatientAdvice ON dbo.Appointment.appointment_id = dbo.PatientAdvice.appointment_id 

      where dbo.Appointment.appointment_id='46'; 
+2

copier et coller le select requête affichée sur l'image dans votre question. – Jagadeesan

+0

Le générateur de vues génère la requête pour vous en bas. Tous les 'JOIN 'seront là. –

Répondre

6

Depuis appointmnent_id est la clé primaire de Appointment, cette table a une relation 1:N avec les 6 tables.

C'est le cas où la jonction à ces 6 tables produira lignes multiples avec des données en double, c'est comme un Cartesian Product. Par exemple, si (pour un seul id=46), il y a:

  • 3 rangées pour PatientInvestigation
  • 6 rangs pour PatientTreatmentMedicine
  • 4 rangs pour PatientFindings
  • 2 rangées pour PatientDiagnosis
  • 2 rangées pour PatientCC
  • 5 lignes pour PatientAdvice

vous obtiendrez 3x6x4x2x2x5 = 1440 lignes du jeu de résultats, alors que vous avez seulement besoin 3 + 6 + 4 + 2 + 2 + 5 (+1) = 23 lignes. C'est 60 fois plus de lignes (et avec beaucoup plus de colonnes) que nécessaire.

Il est préférable si vous 6 requêtes séparées avec un REJOIGNEZ à un (des) 6 tables dans chaque requête (et une autre requête pour obtenir les données de la table de base Appointment). Et combiner les résultats des 6 requêtes dans le code d'application. Exemple pour la requête de base et la requête pour rejoindre à la première table:

Table de base:

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

Rejoignez-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 
+0

je jette un coup d'oeil avec cette approche ... –

+0

puis-je faire une vue pour cette approche? Alors comment sera-t-il? –

+0

Si vous voulez voir, vous devez créer 6 (+1) vues. Pourquoi avez-vous besoin de Views? –

0
SELECT {TABLE1}.appointment_id,{OTHER FIELDS} FROM {TABLE1} 
    JOIN {TABLE2} ON {TABLE1}.appointment_id = {TABLE2}.appointment_id 
    JOIN {TABLE3} ON {TABLE1}.appointment_id = {TABLE3}.appointment_id 
    JOIN {TABLE4} ON {TABLE1}.appointment_id = {TABLE4}.appointment_id 
    JOIN {TABLE5} ON {TABLE1}.appointment_id = {TABLE5}.appointment_id 
    JOIN {TABLE6} ON {TABLE1}.appointment_id = {TABLE6}.appointment_id 
    JOIN {TABLE7} ON {TABLE1}.appointment_id = {TABLE7}.appointment_id 
    JOIN {TABLE8} ON {TABLE1}.appointment_id = {TABLE8}.appointment_id; 

Essayez ceci:

SELECT 
    dbo.Appointment.appointment_id, dbo.Appointment.patient_id, 
    dbo.PatientInvestigaiton.investigation_name, dbo.PatientInvestigaiton.investigation_id, 
    dbo.PatientTreatmentMedicine.medecine_id, dbo.PatientTreatmentMedicine.medicinename, dbo.PatientTreatmentMedicine.medicinetype, 
    dbo.PatientFindings.finding_id, dbo.PatientFindings.finding_value, 
    dbo.PatientAdvice.advice_description, 
    dbo.PatientCC.cc_value, dbo.PatientCC.cc_id, 
    dbo.PatientDiagonosis.diagonosis_name, dbo.PatientDiagonosis.diagonosis_id 
FROM 
    dbo.Appointment 
    LEFT JOIN dbo.PatientInvestigaiton 
     ON dbo.Appointment.appointment_id = dbo.PatientInvestigaiton.appointment_id 
    LEFT JOIN dbo.PatientTreatmentMedicine 
     ON dbo.Appointment.appointment_id = dbo.PatientTreatmentMedicine.appointment_id 
    LEFT JOIN dbo.PatientFindings 
     ON dbo.Appointment.appointment_id = dbo.PatientFindings.appointment_id 
    LEFT JOIN dbo.PatientDiagonosis 
     ON dbo.Appointment.appointment_id = dbo.PatientDiagonosis.appointment_id 
    LEFT JOIN dbo.PatientCC 
     ON dbo.Appointment.appointment_id = dbo.PatientCC.appointment_id 
    LEFT JOIN dbo.PatientAdvice 
     ON dbo.Appointment.appointment_id = dbo.PatientAdvice.appointment_id 
WHERE 
    dbo.Appointment.appointment_id='46'; 
+0

qu'en est-il si j'ai besoin de données avec rendez-vous? –

+0

copiez et collez la requête select affichée sur l'image dans votre question, afin que je puisse le modifier si nécessaire. – Jagadeesan

+0

S'il vous plaît jeter un oeil à la requête j'ai mis à jour dans le message principal .. je reçois plusieurs données après avoir rejoint ... est-ce ok? –

1
SELECT 
    Appointment.appointment_id, 
    Appointment.patient_id, 
    PatientInvestigaiton.investigation_name, 
    PatientInvestigaiton.investigation_id, 
    PatientTreatmentMedicine.medecine_id, 
    PatientTreatmentMedicine.medicinename, 
    PatientTreatmentMedicine.medicinetype, 
    PatientFindings.finding_id, 
    PatientFindings.finding_value, 
    PatientAdvice.advice_description, 
    PatientCC.cc_value, 
    PatientCC.cc_id, 
    PatientDiagonosis.diagonosis_name, 
    PatientDiagonosis.diagonosis_id 
FROM 
    Appointment 
    LEFT OUTER JOIN PatientInvestigaiton  ON Appointment.appointment_id = PatientInvestigaiton.appointment_id AND Appointment.appointment_id='46' 
    LEFT OUTER JOIN PatientTreatmentMedicine ON Appointment.appointment_id = PatientTreatmentMedicine.appointment_id 
    LEFT OUTER JOIN PatientFindings   ON Appointment.appointment_id = PatientFindings.appointment_id 
    LEFT OUTER JOIN PatientDiagonosis  ON Appointment.appointment_id = PatientDiagonosis.appointment_id 
    LEFT OUTER JOIN PatientCC    ON Appointment.appointment_id = PatientCC.appointment_id 
    LEFT OUTER JOIN PatientAdvice   ON Appointment.appointment_id = PatientAdvice.appointment_id 
Questions connexes