SQL查询-需要得到一个不在表中的值


SQL Query - Need to get a value not in a table

我有以下SQL为我的PHP项目,我需要接收模块状态文本以匹配模块表中的状态Id,但如果状态Id值不存在,我可以在SQL中设置一个值吗?这是一个简单的查询,但我正在寻找一个有效的解决方案,所以我不必运行2个单独的查询。

Thanks in advance.

下面是我现在所拥有的,但它确实选择了在ModuleStatus中不引用的值。

SELECT m.moduleID, m.moduleDesc,s.statusDesc,
FROM Modules m, ModuleStatus s 
WHERE s.statusID = m.statusID

下面是我得到的结果的简化版本…
模块

+--------+---------+---------+
|   ID   |   Desc  |  Stat   |
+--------+---------+---------+
|   5    |   Car   |  1      |
+--------+---------+---------+
|   6    |   Bike  |  2      |
+--------+---------+---------+

ModuleStatus

+--------+---------+
|   ID   |   Desc  |
+--------+---------+
|   1    | on      |
+--------+---------+
|   0    | off     |
+--------+---------+

结果将是
结果

+--------+---------+---------+
|   ID   |   Desc  |  Stat   |
+--------+---------+---------+
|   5    |   Car   |  on     |
+--------+---------+---------+

但是我想要的是
期待! !

+--------+---------+---------+
|   ID   |   Desc  |  Stat   |
+--------+---------+---------+
|   5    |   Car   |  on     |
+--------+---------+---------+
|   6    |   Bike  | Unknown |
+--------+---------+---------+

你需要一个左外连接:

SELECT m.moduleID, m.moduleDesc,s.statusDesc,
FROM Modules m
LEFT OUTER JOIN ModuleStatus s 
ON s.statusID = m.statusID

在这个答案中很好的例子->"INNER join"answers"INNER join"的区别是什么?and ';OUTER join ';?

根据@MGA的建议…您可以通过更新select语句将缺失的值更改为"unknown":

SELECT m.moduleID, m.moduleDesc, IsNull(s.statusDesc,'Unknown')
FROM Modules m
LEFT OUTER JOIN ModuleStatus s 
ON s.statusID = m.statusID 
SELECT m.moduleID, m.moduleDesc,s.statusDesc,
FROM Modules m left outer join ModuleStatus s 
on s.statusID = m.statusID
SELECT m.moduleID AS ID, m.moduleDesc AS Desc, 
       ISNULL(s.statusDesc, 'Unknown') AS Stat
FROM Modules m
LEFT OUTER JOIN ModuleStatus s 
ON s.statusID = m.statusID