23

我正在尝试更新 name 所在的最新记录JohnJohn有多个记录但 ID 不同),但我似乎处于绑定状态。我的查询有什么问题?

UPDATE messages_tbl SET is_unread=1
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John')

有没有更好的方法来做这样的事情?

4

2 回答 2

67

您可以尝试使用ORDERand LIMIT

试试这个:

UPDATE messages_tbl SET is_unread = 1
WHERE name = 'John'
ORDER BY ReceiveTime DESC
LIMIT 1

此查询将按照从最高(最近)ReceiveTime到最低(最旧)的顺序更新行ReceiveTime。与 一起使用,只会更改LIMIT最近的。ReceiveTime

于 2013-03-30T07:02:10.537 回答
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最新条目的列。

于 2013-03-30T07:02:39.460 回答