Mysql 用CASE更新表
我有两个表user\u master和login\u history。在User_master中,如果用户已在登录历史记录的当前日期登录,则我希望将状态列更新为Aabsent或PPresent。我正在尝试的代码将更新所有行。我想要的是,如果用户已经登录,它应该匹配这两个表,并将user_master status列更新为P或A。希望我的问题是清楚的。非常感谢您的帮助。这是我的MySQL查询Mysql 用CASE更新表,mysql,sql,stored-procedures,sql-update,case,Mysql,Sql,Stored Procedures,Sql Update,Case,我有两个表user\u master和login\u history。在User_master中,如果用户已在登录历史记录的当前日期登录,则我希望将状态列更新为Aabsent或PPresent。我正在尝试的代码将更新所有行。我想要的是,如果用户已经登录,它应该匹配这两个表,并将user_master status列更新为P或A。希望我的问题是清楚的。非常感谢您的帮助。这是我的MySQL查询 UPDATE User_master a INNER JOIN ( SELECT DIS
UPDATE User_master a
INNER JOIN
(
SELECT DISTINCT user_name FROM login_history WHERE DATE(`login_time`)=CURRENT_DATE()
) b
SET a.`user_status` = CASE
WHEN a.`user_name`=B.`user_name` THEN 'P'
WHEN a.`user_name`!=B.`user_name` THEN 'A'
END
嗯,我在想左联合:
我突然想到,在给定的日期可能有多个登录名。结果是在同一行上进行其他更新。您可以通过执行以下操作来防止这种情况:
UPDATE User_master m LEFT JOIN
(SELECT lh.user_name, 'P' as user_status
FROM Login_History lh
WHERE lh.login_time >= CURRENT_DATE() AND
lh.login_tie < DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY)
GROUP BY lh.user_name
) lh
ON m.user_name = lh.user_name
SET m.user_status = COALESCE(lh.user_status, 'A');
请注意,我还更改了日期算术。这个版本应该更好地使用索引。Hmmm,我想左连接:
我突然想到,在给定的日期可能有多个登录名。结果是在同一行上进行其他更新。您可以通过执行以下操作来防止这种情况:
UPDATE User_master m LEFT JOIN
(SELECT lh.user_name, 'P' as user_status
FROM Login_History lh
WHERE lh.login_time >= CURRENT_DATE() AND
lh.login_tie < DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY)
GROUP BY lh.user_name
) lh
ON m.user_name = lh.user_name
SET m.user_status = COALESCE(lh.user_status, 'A');
请注意,我还更改了日期算术。此版本应更好地使用索引。使用两个查询可能更容易: 设置每个人缺席更新。。。设置用户_status='A' 使用选择集将当前人员设置为P。 像这样:
update user_master set user_status='A';
update user_master set user_status='P'
where user_name in (select distinct user_name from login_history...);
连接稍微快一点,但这是一种非常干净、易懂的方法。使用两个查询可能更容易: 设置每个人缺席更新。。。设置用户_status='A' 使用选择集将当前人员设置为P。 像这样:
update user_master set user_status='A';
update user_master set user_status='P'
where user_name in (select distinct user_name from login_history...);
连接稍微快一些,但这是一种非常干净、可以理解的方法