gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 22:17:31 24 4
gpt4 key购买 nike

这是我第一次创建 MySQL 存储过程,并且一直致力于让 UPDATE 部分正常工作。该过程正在执行内部联接,寻找域名字段的匹配项。如果存在匹配,则名为 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 对其进行标记。如果这样可以解决问题,请告诉我 - 谢谢

最佳答案

您的 JOIN 条件与您的 CASE 条件相同。如果您JOIN您的两个 table :

a.senderDomain = d.domainName

那么结果集中将不会有任何值

a.senderDomain != d.domainName

因此 CASE 语句的 ELSE 子句永远不会触发。

如果不了解“匹配”和“不匹配”的含义,我无法真正建议更正。

关于使用 Join 和 CASE..ELSE 语法更新 MySQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31078281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com