如何解决mysql组合语句与每个字段的单独测试
可以将这些更新语句组合为一个更新语句还是循环遍历以组合所需的语句?目标是仅更新为空或为空的字段。 P_Id是AI。 @Existing_P_Id ='1'(抱歉,MI已纠正)
UPDATE participant
SET First_Name = @existing_First_Name
WHERE P_Id = @existing_P_Id AND First_Name = '';
UPDATE participant
SET MI = @existing_MI
WHERE P_Id = @existing_P_Id AND MI = '';
UPDATE participant
SET Last_Name = @existing_Last_Name
WHERE P_Id = @existing_P_Id AND Last_Name = '';
解决方法
我假设您的MI列应设置为变量@existing_MI
UPDATE participant
SET First_Name = IFNULL(NULLIF(First_Name,''),@existing_First_Name),MI = IFNULL(NULLIF(MI,@existing_MI),Last_Name = IFNULL(NULLIF(Last_Name,@existing_Last_Name)
WHERE P_Id = @existing_P_Id;
参考:
,您可以在IN
子句中使用WHERE
,在SET
子句中使用条件表达式:
UPDATE participant
SET
First_Name = CASE WHEN First_Name = '' THEN @existing_First_Name ELSE First_Name END,MI = CASE WHEN MI = '' THEN @existing_MI ELSE MI END,Last_Name = CASE WHEN Last_Name = '' THEN @existing_Last_Name ELSE Last_Name END
WHERE
P_Id = @existing_P_Id
AND '' IN (First_Name,MI,Last_Name)
,
您绝对可以做到这一点。
我猜您在@existing_whatever
会话变量中有要用于条件更新的值。我不了解您想要MI
的什么,所以我不在回答之列。
这是您的更新代码(请务必对此进行测试)。
UPDATE participant SET
first_name = IF(first_name IS NULL OR LENGTH(first_name) = 0,@existing_First_Name,last_name),last_name = IF(last_name IS NULL OR LENGTH(last_name) = 0,@existing_Last_Name,last_name)
WHERE P_Id = @existing_P_Id
IF()
函数使用@existing_...
值或表中已有列的值进行条件更新。
您可以将其添加到UPDATE的末尾,以免完全不需要修改该行。
AND (first_name IS NULL OR LENGTH(first_name) = 0 OR
last_name IS NULL OR LENGTH(last_name) = 0)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。