我需要在一列中列出6个医疗办公室,在另一列中列出患者的全名。如果患者之前从未访问过该办公室,则应出现NULL。
MedicalOffice表中每个办公室只有一个ID,但是MedicalProcedure每个患者可以拥有多个officeID,甚至同一个患者的办公室ID也不止一次。
我在SO上找到了一些答案,我尝试了左外连接:
select m.Name, p.FullName
from MedicalOffice m
left outer join MedicalProcedure p ON m.ID = p.officeID
where m.ID IN (1,2,3,4,5,6)
AND p.patientID = 111
GROUP BY m.Name, p.patientID
ORDER BY m.Name
然后左连接:
select m.Name, p.FullName
from MedicalOffice m
left join MedicalProcedure p ON m.ID = p.officeID
where m.ID IN (1,2,3,4,5,6)
AND p.patientID = 111
GROUP BY m.Name, p.patientID
ORDER BY m.Name
但是我只能在MedicalProcedure表中找到记录存在的办公室:
Name | FullName
----------------------------------
Office 1 Smith, John
Office 2 Smith, John
Office 4 Smith, John
但是,如果PatientID 111在第1和第4办公室的MedicalProcedure表中有3条记录,则结果应如下所示:
Name | FullName
----------------------------------
Office 1 Smith, John
Office 2 Smith, John
Office 3 NULL
Office 4 Smith, John
Office 5 NULL
Office 6 NULL
有没有办法得到我需要的结果?
谢谢!
答案 0 :(得分:4)
只需将p.patientID = 111
条件移至ON
子句即可。在Where
中,它有效地将outer join
更改为inner join
:
Select
Distinct --< Substitute for Group By
m.Name, p.FullName
From MedicalOffice m
Left Join MedicalProcedure p On m.ID = p.officeID AND p.patientID = 111
Where m.ID IN (1,2,3,4,5,6)
/* Group By m.Name, p.patientID */ --< won't work in this example
Order By m.Name
答案 1 :(得分:1)
删除
m.ID IN (1,2,3,4,5,6)
此条件将停止空值显示