2017-01-16 49 views
0

我想加入三個表與此查詢缺失值:加入3表,顯示記錄,即使從第3表

select *, max(working_dx.date_added), diagnosis_list.diagnosis as WorkingDiagnosis from working_dx 
    inner join ild on ild.id_incr=working_dx.pt_id 
    inner join diagnosis_list on working_dx.dx_id = diagnosis_list.id 
    group by pt_id"; 

我想在ILD表中的所有記錄,即使沒有匹配的記錄在working_dx - 如果不匹配,則WorkingDiagnosis中的值將只是空白。

上述查詢只給我回記錄,其中working_dx.dx_id有一個值。即使空白,我如何做JOIN語句還原所有記錄。

+0

使用'留下join'返回那裏沒有記錄也:http://dev.mysql.com/doc/refman/5.7/en/left-join-optimization。 html – Kisaragi

+0

哪個表格離開了連接?如果我離開加入,我仍然只獲得252條記錄,而ild表有600條記錄。我改變了查詢來獲得它從ild表,仍然只有250條記錄。 – user2557039

+0

如果你想要'ild'中的所有記錄,那麼你需要從該表中進行選擇,並將其他兩個記錄在共同的列上。你的小組通過聲明也可能導致其他人被排除在外。 – Kisaragi

回答

0

試試這個:

SELECT *, max(working_dx.date_added), 
(CASE WHEN diagnosis_list.id IS NULL THEN "" ELSE diagnosis_list.diagnosis END) as WorkingDiagnosis 
    FROM working_dx 
    INNER JOIN ild on ild.id_incr=working_dx.pt_id 
    LEFT JOIN diagnosis_list on working_dx.dx_id = diagnosis_list.id 
    GROUP BY pt_id;