2012-11-03 52 views
0

我有以下SQL查詢,它用各種電話呼叫的細節填充表。Sql如果Select不返回任何內容,則插入默認值

INSERT tblCalls (callerID, destinationNum) 
SELECT tblCallerID.callerID, tblSkyNums.skyID 
FROM tblCallerID, tblSkyNums 
WHERE tblCallerID.callerNumber = '".$caller_id."' 
AND tblSkyNums.skyNum = '".$dest_no."' 

該查詢從兩個獨立表中獲取callerID和skyID,並將它們插入到第三個表中; tblCalls。

我的問題是有時候輸入的號碼不存在skyID,當這種情況發生時,什麼都不會輸入到tblCalls中。這意味着沒有數據記錄此通話。

我一直在試圖做的是,如果沒有這樣的skyID存在,只需在該skyID字段中輸入'n/a'即可。

我已經在這裏超過兩天了,現在似乎找不到一種方法來使其工作。 任何幫助將被熱切讚賞。

回答

1

聚合只會讓你在那裏的一半。問題是FROM子句中的','執行INNER JOIN,因此如果在tblSkyNums中沒有選擇行,那麼將不會從SELECT查詢返回行。

要解決這個問題,你需要一個OUTER JOIN:

INSERT INTO tblCalls (callerID, destinationNum) 
SELECT DISTINCT tblCallerID.callerID, COALESCE(tblSkyNums.skyID, 'N/A') AS skyID 
    FROM tblCallerID 
    LEFT OUTER JOIN tblSkyNums 
    ON tblSkyNums.skyNum = '".$dest_no."' 
WHERE tblCallerID.callerNumber = '".$caller_id."' 

希望這有助於!

約翰......

+0

這工作完美! 我會給你加一個,但我不能因爲我的低代表。 謝謝你的幫助約翰! – Paddyd

+0

很高興能幫到你!接受答案與給我+1一樣好。 –

+0

Answer Accepted,再次感謝 – Paddyd

相關問題