无法在FROM子句中指定目标表'location'进行更新。

9 浏览
0 Comments

无法在FROM子句中指定目标表'location'进行更新。

为某种原因,我在MySql中遇到了错误:无法在FROM子句中指定更新目标表\'location\'\n我做错了什么?

0
0 Comments

问题的原因是在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子句中引用目标表。

0