Mysql 使用最小值sql更新行

Mysql 使用最小值sql更新行,mysql,sql,Mysql,Sql,我有这张桌子: ----------------------- summonerId | timestamp ----------------------- 253222 | 14395235091096 929112 | 14395235091056 (...) 我想用较低的时间戳更新行,但我不能,当我这样做的时候 UPDATE summoners_shell SET summonerId = ".$s.", timestamp = ".$time." WHERE ti

我有这张桌子:

-----------------------
summonerId | timestamp
-----------------------
253222     | 14395235091096
929112     | 14395235091056
(...)
我想用较低的时间戳更新行,但我不能,当我这样做的时候

UPDATE summoners_shell 
SET 
summonerId = ".$s.",
timestamp = ".$time." 
WHERE timestamp = (SELECT MIN(timestamp))
它会更新所有行!为什么?我怎么做我想做的

 UPDATE summoners_shell SET summonerId=".$s.",timestamp=".$time." WHERE timestamp=(SELECT MIN(timestamp) FROM summoners_shell)
在子查询中添加以下内容:

FROM summoners_shell
这样试试

UPDATE summoners_shell SET summonerId=".$s.",timestamp=".$time."
     WHERE timestamp=(SELECT MIN(timestamp) from summoners_shell)

如果这不是一个输入错误,那么这个查询可能会解决您的问题

UPDATE summoners_shell 
    SET summonerId=".$s.",
    timestamp=".$time." 
WHERE timestamp=(
    SELECT MIN(timestamp)
    FROM 
    summoners_shell 
    )

SELECT
-子查询位于
WHERE
-子句中时,它会锁定表,使更新无法通过。 只需使用
JOIN
即可

UPDATE summoners_shell AS s1
JOIN (SELECT MIN(timestamp) AS mt FROM summoners_shell) AS mt ON (s1.timestamp = mt.mt)
SET 
    summonerId = ".$s.",
    timestamp = ".$time."

您确定查询已完成吗?请从表中选择“最小时间戳”。您的代码是timestamp=timestamp
选择MIN(timestamp)
?从哪里开始?从召唤者外壳,但如果我把它放在那里,它会给我一个错误:你不能从clauseWell中指定更新的目标表'召唤者外壳',这表示“目前,你不能更新一个表并在子查询中从同一个表中进行选择。”。那有解决办法吗?我已经试过了。它给了我一个错误:您不能在FROM子句中为更新指定目标表'callers\u shell'