我有以下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'即可。
我已经在这里待了两天多了,似乎无法找到办法让它发挥作用。 任何帮助都会得到很好的赞赏。
答案 0 :(得分:1)
Coalesce只让你到了一半。问题是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."'
希望这有帮助!
...约翰