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'