我正在尝试更新名字为John
的最新记录(John
有多条记录但ID不同),但似乎遇到了困境。我的查询有什么问题?
我试图更新名称为John
的最新记录,但是我似乎陷入了困境。我的查询有什么问题?
UPDATE messages_tbl SET is_unread=1
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John')
有没有更好的方法来做类似这样的事情?
我正在尝试更新名字为John
的最新记录(John
有多条记录但ID不同),但似乎遇到了困境。我的查询有什么问题?
我试图更新名称为John
的最新记录,但是我似乎陷入了困境。我的查询有什么问题?
UPDATE messages_tbl SET is_unread=1
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John')
有没有更好的方法来做类似这样的事情?
你可以尝试使用 ORDER
和 LIMIT
。
试试这个:
UPDATE messages_tbl SET is_unread = 1
WHERE name = 'John'
ORDER BY ReceiveTime DESC
LIMIT 1
此查询将按照最高(最近)的ReceiveTime
顺序更新行,直到最低(最旧)的ReceiveTime
。与LIMIT
一起使用,只有最近的ReceiveTime
会被更改。
您可以将两个表联结起来,并根据条件执行更新操作。
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
列。Query : update messages s1 set is_unread=1 inner join (SELECT Name, MAX(ReceiveTime) max_time FROM messages group by Messa... Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'inner join (SELECT Name, MAX(ReceiveTime) max_time FROM messages group' at line 2
- enchanceWHERE
,这样我就可以针对特定的行进行操作,它仍然有效。 :) - enchance