我甚至不确定这是否可能,但如果满足特定条件,我会尝试进行不同的更新。
用户id,start_date(非NULL),end_date(NULL),reason(NULL),.....
user_roles id、role_id、user_id、start_date(非NULL)、end_date(NULL)
我现在有的是这样的,但只有当用户的角色存在,并且它的end_date为空时,它才有效:
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我在考虑做这样的事情:
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发布于 2009-12-11 22:24:09
由于唯一的区别是您是将ur.end_Date设置为当前日期还是将其设置为其现有日期,因此您可以使用以下内容:
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 = 5https://stackoverflow.com/questions/1886928
复制相似问题