我有以下 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”即可。
我已经这样做了两天多了,似乎找不到一种方法让它发挥作用。 任何帮助将不胜感激。
最佳答案
合并只能让你成功一半。问题在于 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."'
希望这有帮助!
约翰...
关于mysql - 如果 Select 不返回任何内容,Sql 插入默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13210900/