Mysql 使用另一列中的最高值更新sql列
我会尽量把自己说清楚的 我有两个表,一个叫做Users,另一个叫做Users\u status 表用户 表2用户的状态 我想制作一个cron来验证表Users的第2列是否是表Users的第2列的最新状态 表Users_status可能会多次重复user_id,user_status会递增,如下所示: 表2用户的状态 我希望通过1个请求,根据表Users_status中最新的最高用户_status更新表Users status的第二列 我还不想更新状态与表Users\u status相同的行 如何做到这一点?我已经尝试了很多事情,当我认为这会起作用时,它或者只是将状态从1切换到2,或者从2切换到1,或者发生了一些MYSQL约束错误 如果有人能帮我,我真的很高兴Mysql 使用另一列中的最高值更新sql列,mysql,Mysql,我会尽量把自己说清楚的 我有两个表,一个叫做Users,另一个叫做Users\u status 表用户 表2用户的状态 我想制作一个cron来验证表Users的第2列是否是表Users的第2列的最新状态 表Users_status可能会多次重复user_id,user_status会递增,如下所示: 表2用户的状态 我希望通过1个请求,根据表Users_status中最新的最高用户_status更新表Users status的第二列 我还不想更新状态与表Users\u status相同的行 如何
谢谢,您可以在子查询中使用join
UPDATE users
JOIN (SELECT
user_id,
MAX(status) status
FROM
users_status
GROUP BY user_id
) st
ON users.id = st.user_id
SET users.status = st.status
WHERE users.status < st.status
此查询适用于我:
update users set status = case when id <> (select b.j from (select m.id j
from users m join users_status n on m.id=n.user_id and m.status=n.user_status) b) then
(select max(user_status) from users_status group by user_id having
users_status.user_id=users.id)
else status END;
具体来说是最高状态,而不是为给定用户输入的最后一个状态。感谢这完美地完成了工作,我想我错过了一部分组,我仍然不知道为什么
user_id : 1
user_status : 1
user_id : 1
user_status : 2
user_id : 1
user_status : 3
user_id : 2
user_status : 1
user_id : 2
user_status : 2
UPDATE users
JOIN (SELECT
user_id,
MAX(status) status
FROM
users_status
GROUP BY user_id
) st
ON users.id = st.user_id
SET users.status = st.status
WHERE users.status < st.status
update users set status = case when id <> (select b.j from (select m.id j
from users m join users_status n on m.id=n.user_id and m.status=n.user_status) b) then
(select max(user_status) from users_status group by user_id having
users_status.user_id=users.id)
else status END;