mysql - 如果 Select 不返回任何内容,Sql 插入默认值

标签 mysql sql select insert

我有以下 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/

相关文章:

sql - 在一列上获取子记录

c++ - 将 std::wstring 转换为 SQLWCHAR *

SQLite查询;按小时和设备分组

mysql - 在 SQL 中查找重复值对

mysql - 获取子项数小于 2 的记录

mysql - 自连接mysql复杂查询

php - php mysql 的表关联(加入?)

PHP MySQL PDO 绑定(bind)输入/输出相同参数

sql - 如何使用 SQL 中存储过程的值填充结果 View 列?

javascript - 选择列表禁用出错