0

我有以下 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”即可。

我已经在这里待了两天多了,似乎找不到让它工作的方法。任何帮助将不胜感激。

4

1 回答 1

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."'

希望这可以帮助!

约翰...

于 2012-11-03T16:12:12.263 回答