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 连接具有空值的表的主要内容,如果未能解决你的问题,请参考以下文章

类型表空值检查

如何获取sql中给定行具有空值的列数?

SQL从具有空值的行数据中选择MIN值

sql server 查询 order by 与 union 并替换多个列的空值

用于检查整个表的空值的 Bigquery SQL 函数

在每个数据库的表中查找具有空值的列[关闭]