max in where子句更新mysql

时间:2012-11-10 10:57:34

标签: 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

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

需要一些帮助。

由于

2 个答案:

答案 0 :(得分: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_iduser_id返回最大ID,然后您加入inbox最大ID以选择您想要的行,您可以然后只更新那一行。

答案 1 :(得分:1)

你需要像read一样使用反引号来转义reserved words in MySQL。您还可以使用limit更新最佳记录。

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

SQLFiddle example