我正在尝试更新名称为John
的最新记录(John
有多条记录但ID不同)但我似乎处于绑定状态。我的查询出了什么问题?
UPDATE messages_tbl SET is_unread=1
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John')
有没有更好的方法来做这样的事情?
答案 0 :(得分:38)
您可以尝试使用ORDER
和LIMIT
。
试试这个:
UPDATE messages_tbl SET is_unread = 1
WHERE name = 'John'
ORDER BY ReceiveTime DESC
LIMIT 1
此查询将按最高(最近)ReceiveTime
到最低(最旧)ReceiveTime
的顺序更新行。与LIMIT
结合使用时,只会更改最新的ReceiveTime
。
答案 1 :(得分:7)
您可以加入并根据条件执行更新。
UPDATE messages a
INNER JOIN
(
SELECT name , MAX(ReceiveTime) max_time
FROM messages
GROUP BY name
) b ON a.name = b.name AND
a.ReceiveTime = b.max_time
SET a.is_unread = 1
-- WHERE a.name = 'John'
没有WHERE
条件。它将全部更新列is_unread
以获取最新条目。