我有以下SQL查询,该查询使用各种电话的详细信息填充表格。
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”。
我已经在这里待了两天了,似乎无法找到一种方法来使其工作。
任何帮助将不胜感激。
最佳答案
Coalesce只能将您带到一半。问题是FROM子句中的','执行INNER JOIN,因此,如果在tblSkyNums中未选择任何行,那么SELECT查询将不会返回任何行。
要解决此问题,您需要一个外部联接:
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."'
希望这可以帮助!
约翰...