使用Join和CASE..ELSE语法更新MySQL存储过程
这是我第一次创建MySQL存储过程,我一直在努力使更新工作正常。进程正在执行内部联接,在域名字段上查找匹配项。如果存在匹配项,将使用值0更新名为使用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
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
子句永远不会触发
如果我不知道你所说的“匹配”和“非匹配”是什么意思,我真的不能建议改正