我会尽量让自己变得清晰。
我有两个表,一个名为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约束错误。
如果有人可以帮助我,我真的很高兴
谢谢,
答案 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;