2011-11-27 69 views
1

我有以下SQLPHP项目,我需要接受模块状态文本在模块表匹配状态标识,但如果状态ID值不存在,我可以在SQL中设置一个值吗? 这是一个简单的查询,但我寻找一个有效的解决方案,所以我不必运行2个单独的查询。SQL查询 - 需要在表格中获得价值不

在此先感谢..

下面是我现在有,但它确实选择未在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

嘿谢谢大家的贡献,看起来我已经找到了解决方案,但作为一个新手,我在这里设置答案在某处,我尝试对某些回应投票,但显然不允许!无论如何,谢谢你! – IEnumerable

回答

1

你需要一个左外连接:

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

在这个答案很好的例子 - >What is the difference between "INNER JOIN" and "OUTER JOIN"?

正如@MGA建议......你可以改变缺失值“未知“:

SELECT m.moduleID, m.moduleDesc, IsNull(s.statusDesc,'Unknown') 
FROM Modules m 
LEFT OUTER JOIN ModuleStatus s 
ON s.statusID = m.statusID 
+0

+ 1,Perfect.BTW:我认为它应该是'IsNull(s.statusDesc,'Unkown')' –

+0

@MGA - 确定 - 而不是'null' ...我将更新答案...谢谢 – ManseUK

+0

I就像提供的第二种解决方案一样,但它不能执行。我运行它通过php mysql_query()所以我概率有一个空格或逗号在错误的地方! – IEnumerable

1
SELECT m.moduleID, m.moduleDesc,s.statusDesc, 
FROM Modules m left outer join ModuleStatus s 
on s.statusID = m.statusID 
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 
+1

谢谢你这一个最适合我,我查了左外连接,但结果是多个记录,不适合我。谢谢 – IEnumerable