【问题标题】:MySQL Stored Procedure update using a Join and CASE..ELSE syntaxMySQL 存储过程更新使用 Join 和 CASE..ELSE 语法
【发布时间】:2015-06-26 16:48:20
【问题描述】:

这是我第一次创建 MySQL 存储过程,并且一直坚持让 UPDATE 部分正常工作。 proc 正在执行内部连接,在域名字段上查找匹配项。如果有匹配项,则名为 inbound 的列将更新为值 0。如果连接上没有匹配项,则我需要将 inbound 设置为值 1。 当我运行它时,我可以得到标记为 0 的匹配项,但非匹配项没有更新为 1。我认为我如何设置“ELSE”部分会解决这个问题 - 任何人都可以告诉我是否缺少语法?

CREATE PROCEDURE `sp_InboungTagging`()

BEGIN

    update `tableA` a
         inner join `TableD` d
                  on a.senderDomain = d.domainName
                        set inbound = CASE 
                            when a.senderDomain = d.domainName then  0
                              ELSE 1

END

        WHERE inbound is null;

END;|

DELIMITER ;

谢谢,

罗恩

编辑- 感谢您的回复。我正在查找其中包含域名的 varchar 字段的完全匹配项 - 域的主列表在表 D 中。如果 TableA 中的记录在 TableD 中有匹配项,我想用 0 标记该记录。如果有在 TableD 中不匹配,那么我想用 1 标记它。让我知道这是否可以解决问题-谢谢

【问题讨论】:

    标签: mysql stored-procedures case


    【解决方案1】:

    您的JOIN 条件与您的CASE 条件相同。如果你JOIN你的两张桌子在:

    a.senderDomain = d.domainName
    

    那么结果集中就没有值了

    a.senderDomain != d.domainName
    

    所以CASE 语句的ELSE 子句永远不会触发。

    如果不了解您所说的“匹配”和“不匹配”是什么意思,我真的无法提出更正建议。

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 2016-11-09
      相关资源
      最近更新 更多