【问题标题】:Sql Insert default value if Select returns nothing如果 Select 不返回任何内容,则 Sql 插入默认值
【发布时间】:2012-11-03 16:04:06
【问题描述】:

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

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

【问题讨论】:

    标签: mysql sql select insert


    【解决方案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."'
    

    希望这会有所帮助!

    约翰...

    【讨论】:

    • 效果很好!我会给你加一,但我不能因为我的低代表。谢谢你的帮助约翰!
    • 很高兴能帮上忙!接受答案就像给我 +1 一样好。
    • 回答已接受,再次感谢
    • @Paddyd 我为你做了加一,这个答案对我也很有用。 ;-)
    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2016-04-20
    • 2021-11-19
    • 2018-12-12
    • 1970-01-01
    • 2013-05-12
    相关资源
    最近更新 更多