我的 PHP 项目有以下 SQL ,我需要接收模块状态文本以匹配<中的状态ID i> Module 表,但如果状态id值不存在,我可以在SQL中设置一个值吗? 这是一个简单的查询,但我正在寻找一个有效的解决方案,所以我不必运行2个单独的查询。
提前致谢..
下面是我现在的内容,但它确实选择了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 |
+--------+---------+---------+
答案 0 :(得分:1)
您需要左外连接:
SELECT m.moduleID, m.moduleDesc,s.statusDesc,
FROM Modules m
LEFT OUTER JOIN ModuleStatus s
ON s.statusID = m.statusID
这个答案的好例子 - &gt; What is the difference between "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
答案 1 :(得分:1)
SELECT m.moduleID, m.moduleDesc,s.statusDesc,
FROM Modules m left outer join ModuleStatus s
on s.statusID = m.statusID
答案 2 :(得分:0)
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