无法在FROM子句中指定目标表'location'进行更新。
问题的原因是在MySQL中,不能在更新语句的FROM子句中指定目标表。在上述代码中,更新语句中的子查询(SELECT语句)引用了与更新语句相同的表(location),导致出现了这个错误。
要解决这个问题,可以将子查询用另一个SELECT语句包围起来。代码如下:
UPDATE location SET lat = 37.05, lng = -122.05, power = 90, speed = 90, utc = '155', gmt = '156' WHERE index = (SELECT index FROM (SELECT max(index) index FROM location WHERE location.truckid = '1480c667-0bc9-3c60-85f3-6de3b6cd5ad4') x);
另外,在Stack Overflow上也有一个通用的解释和解决方案。正确的解决方法如下:
UPDATE location SET lat = 37.1, lng = -122.05, power = 90, speed = 90, utc = '155', gmt = '156' WHERE location.index = (SELECT * FROM (SELECT max(location.index) FROM location WHERE location.truckid = '1480c667-0bc9-3c60-85f3-6de3b6cd5ad4') x);
上述解决方案中,使用了更加准确的子查询,并且避免了在FROM子句中引用目标表。