2011-07-21 18 views
3

請看看圖像。有關與約會ID的約會表有5個表。 現在我需要具有相同約會ID的所有數據。應該是加入查詢嗎?任何人都可以幫助我嗎? enter image description hereSQL加入6個表

下面是生成的查詢(我使用LEFT OUTER JOIN)

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

複製和粘貼選擇查詢顯示在你的問題中的圖像上。 – Jagadeesan

+0

視圖構建器在底部爲您生成查詢。所有的'JOIN'都會在那裏。 –

回答

6

由於appointmnent_idAppointment主鍵,該表與所有6個表具有1:N關係。

這種情況下,加入這6個表將產生多行重複數據,它就像一個Cartesian Product。例如,如果(只有一個id=46),則有:

  • 3行爲PatientInvestigation
  • 6行爲PatientTreatmentMedicine
  • 4行用於PatientFindings
  • 2行爲PatientDiagnosis
  • 2行對PatientCC
  • 5行用於PatientAdvice

你會得到3x6x4x2x2x5 = 1440行結果集中,而只需要3 + 6 + 4 + 2 + 2 + 5(1)= 23行。這是行數的60倍(並且有更多的列)比需要的多。

它的更好,如果你這樣做6與一個單獨的查詢連爲一體(的6)每個查詢表(和多一個查詢,以便從基表Appointment獲取數據)。並且結合了應用程序代碼中的6個查詢的結果。例如,對於基本查詢和查詢的加入到所述第一表中:

基表

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

加入-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

我正在用這種方法來看看... –

+0

我可以爲這種方法提出看法嗎?那麼它將如何呢? –

+0

如果你想查看,你必須創建6(+1)的意見。你爲什麼需要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; 

試試這個:

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

如果我需要與appointment_id的數據呢? –

+0

複製並粘貼在你的問題中的圖像上顯示的選擇查詢,所以我可以修改它,如果需要。 – Jagadeesan

+0

請看看我在主要帖子更新的查詢..我加入後得到多個數據...是好的嗎? –

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