mysql - 从另一列更新具有最高值的 SQL 列

标签 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_status 表的第 2 列是否是最新的 Users_status 表的第 2 列 表 Users_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 交换到 1,或者发生了一些 MYSQL 约束错误。

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

谢谢

最佳答案

您可以使用带有子查询的连接

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 

关于mysql - 从另一列更新具有最高值的 SQL 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26104399/

相关文章:

mysql - 使用正确数据类型的原因是什么?

MySQL - 仅加入 1 个结果或受其他表限制

php - 使用 php 将服务器时区更改为特定时区

mysql - 将数据对播种到 Rails 应用程序

mysql - 即使新值等于现有主键也能够输入多个值

java - 如何使用主键自动增量在数据库中存储值列表

java- 如何在 MySQL 中获取文件路径并从目录中获取后续文件?

php - PDO 设置 PDO::MYSQL_ATTR_FOUND_ROWS 失败

sql - 1052 : Column 'id' in field list is ambiguous

SQL:从 varchar 转换为 datetime 并比较