使用Join和CASE..ELSE语法更新MySQL存储过程

使用Join和CASE..ELSE语法更新MySQL存储过程,mysql,stored-procedures,case,Mysql,Stored Procedures,Case,这是我第一次创建MySQL存储过程,我一直在努力使更新工作正常。进程正在执行内部联接,在域名字段上查找匹配项。如果存在匹配项,将使用值0更新名为inbound的列。如果联接上没有匹配项,则需要将inbound设置为值1。 当我运行此操作时,我可以将匹配项标记为0,但不匹配项不会更新为1。我想我如何设置“ELSE”部分可以解决这个问题——有人能告诉我是否缺少语法方面的内容吗 CREATE PROCEDURE `sp_InboungTagging`() BEGIN update `tab

这是我第一次创建MySQL存储过程,我一直在努力使更新工作正常。进程正在执行内部联接,在域名字段上查找匹配项。如果存在匹配项,将使用值0更新名为
inbound
的列。如果联接上没有匹配项,则需要将
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。让我知道这是否解决了问题-谢谢

您的
加入
条件与您的
案例
条件相同。如果您
在以下位置连接两个表

a.senderDomain = d.domainName
那么,结果集中就不会有

a.senderDomain != d.domainName
因此,
CASE
语句的
ELSE
子句永远不会触发

如果我不知道你所说的“匹配”和“非匹配”是什么意思,我真的不能建议改正