SQL Server 连接具有空值的表
Posted
技术标签:
【中文标题】SQL Server 连接具有空值的表【英文标题】:SQL Server join tables with null value 【发布时间】:2020-09-25 11:23:26 【问题描述】:假设我在 SQL Server 中有这些表:
tbl_Applicants
ID | name | typeid | depid
---+------+--------+-------
1 | Mark | 1 | NULL
2 | Ted | 2 | 1
tbl_ApplicantType
ID | Type
---+----------
1 | Student
2 | Employee
tbl_Department
ID | department_name
---+----------------
1 | Finance
2 | HR
我想加入表格以便得到下面的结果
这是我想要的结果:
Name | type | department
-----+----------+---------------
Mark | Student | NULL
Ted | Employee | HR
我有这个选择语句:
select
a.name, b.type, c.department_name
from
tbl_applicants a, tbl_ApplicantType b, tbl_Department c
where
a.depid = c.ID and a.typeid = b.ID
这是我现在得到的结果:
Name | type | department
-----+----------+------------
Ted | Employee | HR
知道如何在包含空值的地方实现我想要的结果吗?
【问题讨论】:
使用正确的JOIN
语法,改成LEFT JOIN
更容易
延伸阅读:Bad Habits to Kick : Using old-style JOINs和Bad Habits to Kick : Using table aliases like (a, b, c) or (t1, t2, t3)
【参考方案1】:
永远不要在FROM
子句中使用逗号。 总是使用正确、明确、标准、可读的JOIN
语法。
如果你想要所有申请人,那么你想要LEFT JOIN
:
select a.name, apt.type, d.department_name
from tbl_applicants a left join
tbl_ApplicantType apt
on a.tpeid = apt.id left join
tbl_Department d
on a.depid = d.ID ;
还要注意使用有意义的 表别名而不是任意字母。这也是一种最佳做法。
【讨论】:
以上是关于SQL Server 连接具有空值的表的主要内容,如果未能解决你的问题,请参考以下文章