首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用IF条件的MySQL UPDATE

问使用IF条件的MySQL UPDATE
EN

Stack Overflow用户
提问于 2009-12-11 17:43:02
回答 1查看 34.3K关注 0票数 7

我甚至不确定这是否可能,但如果满足特定条件,我会尝试进行不同的更新。

用户id,start_date(非NULL),end_date(NULL),reason(NULL),.....

user_roles id、role_id、user_id、start_date(非NULL)、end_date(NULL)

我现在有的是这样的,但只有当用户的角色存在,并且它的end_date为空时,它才有效:

代码语言:javascript
复制
UPDATE user p 
JOIN user_roles ur ON p.id = ur.user_id 
SET ur.end_date = NOW()
   , p.end_date = NOW()
   , p.reason = "Retired" 
WHERE p.id = 5 
AND ur.end_date IS NULL

我在考虑做这样的事情:

代码语言:javascript
复制
IF EXISTS (SELECT id FROM user_roles 
WHERE user_id = 5 AND end_date IS NULL)
THEN 
    UPDATE user p 
    JOIN user_roles ur ON p.id = ur.user_id 
    SET ur.end_date = NOW()
        , p.end_date = NOW()
        , p.reason = "Retired" 
    WHERE p.id = 5 AND ur.end_date IS NULL 
ELSE 
    UPDATE user 
    SET end_date = NOW()
        , reason = "Retired" 
    WHERE id = 5 
END IF
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-11 22:24:09

由于唯一的区别是您是将ur.end_Date设置为当前日期还是将其设置为其现有日期,因此您可以使用以下内容:

代码语言:javascript
复制
UPDATE user p  
JOIN user_roles ur 
ON p.id = ur.user_id  
SET 
ur.end_date = IF (ur.end_date IS NULL, NOW(), ur.end_date),
p.end_date = NOW(), 
p.reason = "Retired" 
WHERE p.id = 5
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1886928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档