2011-11-27 70 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