我有以下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