2012-11-03 28 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

相关问题