我有两张桌子
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值的最佳方法是什么?
答案 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:
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