1

我只是坚持使用一个简单的 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

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

需要一些帮助。

谢谢

4

2 回答 2

2

在 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您的子查询根据您想要的和返回最大 id user_id,然后加入inbox最大 id 以选择您想要的行,然后您可以只更新该行。

于 2012-11-10T11:06:33.180 回答
1

您需要像使用反引号一样转义MySQL 中的保留字。read您还可以使用limit仅更新最大的记录。

UPDATE inbox
SET `READ` = 0
order by id desc
limit 1

SQLFiddle 示例

于 2012-11-10T10:59:25.383 回答