SQL查询 - 需要获取不在表中的值

时间:2011-11-27 10:15:44

标签: php sql

我的 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 |
+--------+---------+---------+

3 个答案:

答案 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