mysql - max in where子句更新mysql

标签 mysql

我只是被一个简单的 mysql 查询困住了,我想更新具有表的最大 ID 的行,我正在尝试类似的方法但它不起作用

UPDATE inbox i
INNER JOIN messages m ON i.message_id = m.id 
SET i.read = 0
WHERE m.conversation_id = 10
AND i.user_id = 1
ORDER BY i.id DESC
LIMIT 1

我也尝试过子查询,但它也不起作用

需要一些帮助。

谢谢

最佳答案

在 MySql 中,如果你有一个引用同一个表的子查询,你不能更新一个表,但是你可以用 JOINS 来代替子查询。我会这样做,这是一个技巧,但它有效:

UPDATE
  inbox inner join (select max(id) as maxid from inbox) mx on inbox.id = mx.maxid
SET inbox.`read` = 0

编辑:我看到你编辑了你的问题,所以我必须编辑我的答案:

UPDATE
  inbox
  INNER JOIN (select max(inbox.id) as maxid
              from
                inbox inner join messages
                on inbox.message_id = messages.id
              where
                messages.conversation_id=10
                and inbox.user_id=1) mx
  on inbox.id = mx.maxid
SET inbox.`read` = 0

你的子查询根据conversation_id和你想要的user_id返回最大id,然后你加入inbox选择最大id只更新您想要的行,然后您可以只更新该行。

关于mysql - max in where子句更新mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13321413/

相关文章:

java - JPA + MySQL - 数据库生成的列值

mysql - 数据库选择: frequently querying 2nd degree connections

MySQL 将通配符数据库名称的权限授予新用户

mysql - 使用 codeigniter 和 innodb 引擎 mysql 一次插入两个表

php - 迁移后 Drupal 站点非常慢

mysql - MariaDB 字符编码

php - 如何显示mysql数据库中的图像?

mysql - 使用 SELECT INTO 后,mariaDB (MySQL) 仍然收到 "Not allowed to return a result set from a function"的错误 1415

mysql并排合并查询结果

mysql - 日期范围内的记录 - 性能