查询,当一个表中不存在空值时返回 null 值



我需要在一列中列出6个医疗办公室,在另一列中列出患者的全名。 如果患者以前从未去过该办公室,则应出现空。

  • 表格结构很简单,医疗办公室有一个ID,名称和一些杂列。
  • 医疗程序有办公室 ID、患者 ID、患者全名和一些杂项列。

MedicalOffice 表中每个办公室只有一个 ID,但 MedicalProcedure 可以为每位患者提供多个办公室 ID,甚至可以多次为同一患者使用同一办公室 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

但我只得到医疗程序表中存在记录的办公室,如下所示:

    Name       |    FullName
----------------------------------
Office 1         Smith, John
Office 2         Smith, John 
Office 4         Smith, John

但是,如果 patientID 111 在办公室 1、2 和 4 的医疗程序表中有 3 条记录,则结果应如下所示:

Name       |    FullName
----------------------------------
Office 1         Smith, John
Office 2         Smith, John 
Office 3         NULL
Office 4         Smith, John
Office 5         NULL
Office 6         NULL

有没有办法得到我需要的结果?

谢谢!

只需将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

删除

m.ID IN   (1,2,3,4,5,6)

此条件将停止空值显示

最新更新