更新具有来自另一列的最高值的sql列

时间:2014-09-29 16:18:51

标签: mysql

我会尽量让自己变得清晰。

我有两个表,一个名为Users,另一个名为Users_status。

表用户

column 1 : id (pk)
column 2 : status (fk)

表Users_status

column 1 : user_id (fk)
column 2 : user_status (fk)

我想创建一个cron来验证表Users的第2列是否是表Users_status的第2列的最新版本 表USER_status可能有多次user_id重复,user_status递增,如下所示:

表Users_status

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

我想要1个请求,根据表Users_status中的最新(最高)user_status来更新表Users(status)的第二列 我还想要不更新已经处于良好状态的行(与表Users_status相同的状态)

如何做到这一点?我已经尝试了很多东西,当我认为它可以工作时,它只是将状态从1换成2,然后换成2,或者发生了一些MYSQL约束错误。

如果有人可以帮助我,我真的很高兴

谢谢,

2 个答案:

答案 0 :(得分:1)

您可以使用与子查询的连接

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 

答案 1 :(得分:0)

这个查询对我有用:

 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;