2017-01-16 51 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;