【问题标题】:You can't specify target table 'location' for update in FROM clause [duplicate]您不能在 FROM 子句中为更新指定目标表“位置”[重复]
【发布时间】:2019-10-02 10:39:21
【问题描述】:

由于某种原因,我在 MySql 中遇到错误:您无法在 FROM 子句中指定目标表“位置”进行更新

UPDATE location 
SET 
    lat = 37.05,
    lng = - 122.05,
    power = 90,
    speed = 90,
    utc = '155',
    gmt = '156'
WHERE
    location.index IN (SELECT 
            MAX(location.index)
        FROM
            location
        WHERE
            location.truckid = '1480c667-0bc9-3c60-85f3-6de3b6cd5ad4');

我做错了什么?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    尝试在子查询周围加上另一个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);
    

    【讨论】:

    • 这里有一个关于这个错误的规范答案,它也提供了解释,而不仅仅是一个解决方案。
    • 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);正确答案
    • @Duna: SELECT * 在标量子查询中没有WHERE 肯定不是正确答案,除非表只有一列且最多一行。由于SET 子句中有更多列,因此至少可以排除“唯一一个”列条件。
    猜你喜欢
    • 2015-07-10
    • 2014-07-31
    • 2018-06-04
    • 2020-06-01
    • 2011-05-24
    • 2017-01-12
    相关资源
    最近更新 更多