如何检测logout_time字段是否更新并同步修改salary字段的SQL查询问题
你写的SELECT语句不存在is updated语法,且该需求属于数据更新逻辑,不是单纯的查询需求,按不同使用场景对应正确写法如下:
场景1:手动执行UPDATE操作更新logout_time时同步修改salary
直接在同一条UPDATE语句中嵌入判断逻辑即可,示例如下:UPDATE abc SET logout_time = '2021-08-24 19:30:00', -- 替换为你要更新的logout_time新值 salary = CASE WHEN logout_time != '2021-08-24 19:30:00' THEN 4567 ELSE salary END WHERE id = 1; -- 替换为你实际要更新的行的筛选条件逻辑说明:当原有logout_time与要更新的新值不一致时,salary自动改为4567,否则保持原值不变。
场景2:任意渠道更新logout_time都自动触发salary修改
可使用数据库触发器实现自动处理,以MySQL为例的触发器创建语句如下:DELIMITER // CREATE TRIGGER sync_salary_after_logout_time_update BEFORE UPDATE ON abc FOR EACH ROW BEGIN -- 对比更新前后的logout_time值,发生变化则修改salary IF OLD.logout_time <> NEW.logout_time THEN SET NEW.salary = 4567; END IF; END // DELIMITER ;触发器创建完成后,只要任意UPDATE操作修改了某行的logout_time值,都会自动将对应行的salary改为4567,无需手动写额外逻辑。
场景3:无需修改存储数据,仅查询时动态计算salary展示值
如果你不需要修改表中实际存储的数据,只是查询时根据logout_time是否为初始值动态返回salary,需要你先单独存储每条记录的初始logout_time值(假设字段名为init_logout_time),查询写法如下:SELECT login_time, logout_time, CASE WHEN logout_time <> init_logout_time THEN 4567 ELSE salary END AS salary FROM abc;
内容的提问来源于stack exchange,提问作者user14937341
相关产品推荐
相关产品推荐

