gpt4 book ai didi

mysql - 用案例更新表

转载 作者:太空宇宙 更新时间:2023-11-03 11:45:03 25 4
gpt4 key购买 nike

我有两个表 user_masterlogin_history .
User_master我想更新 status列为 A(absent)P(Present) 如果用户已从登录历史记录中的当前日期登录。
我正在尝试的代码但它会更新所有行。我想要的只是如果用户已登录,它应该匹配两个表并更新 user_master status列为 PA
希望我的问题很清楚。帮助将不胜感激。这是我的 MySQL 查询

 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

最佳答案

嗯,我在想LEFT JOIN:

UPDATE User_master m
LEFT JOIN Login_History lh
ON m.user_name = lh.user_name AND
DATE(lh.login_time) = CURRENT_DATE()
SET m.user_status = (CASE WHEN lh.user_name IS NULL THEN 'A' ELSE 'P' 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');

请注意,我也更改了日期算法。这个版本应该更好地利用索引。

关于mysql - 用案例更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39367635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com