Mysql 使用另一列中的最高值更新sql列

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相同的行 如何

我会尽量把自己说清楚的

我有两个表,一个叫做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约束错误

如果有人能帮我,我真的很高兴


谢谢,

您可以在子查询中使用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;