如何使用空值连接表

时间:2016-01-19 13:59:37

标签: sql

我有两张桌子

Tasks
------
Id         int
Name       varchar(100)
StatusId   int (FK)

Status
------
Id           int
Description  varchar(100)

存在以下值

Tasks
------
Id    Name    StatusId
1     Test1   1
2     Test2   NULL
3     Test3   2

Status
-------
Id     Description
1      Failed
2      Aborted
3      Succeeded

现在,我需要在Tasks中显示其状态的所有值。以下查询不适用于“任务状态标识”列

中的NULL值
SELECT t.Id, t.Name, s.Description FROM Tasks t
JOIN Status s on s.Id = t.StatusId

我想要的输出是什么:

Tasks
------
Id    Name    Description
1     Test1   Failed
2     Test2   NULL
3     Test3   Aborted

相反,我得到

Tasks
------
Id    Name    Description
1     Test1   Failed
3     Test3   Aborted

通过JOIN或其他方式获取所有NULL值的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

使用LEFT JOIN

SELECT t.Id, t.Name, s.Description 
FROM Tasks t
LEFT JOIN Status s 
  on s.Id = t.StatusId;

Visual Representation of SQL Joins

enter image description here

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key

您也可以使用相关子查询(低效):

SELECT t.Id, t.Name,
  (SELECT Description FROM Status s WHERE s.id = t.StatusId) AS  Description 
FROM Tasks t