-5

我有以下查询:

UPDATE packs set `LastmovementTypeID`=9 WHERE `ShipmentID` IN (SELECT ShipmentID FROM packs packs2 WHERE (packs2.TaskMarker = '2' AND packs2.Movementtype != 'Bezorgscan depot' AND packs2.LastmovementTypeID != 0) UNION SELECT ShipmentID FROM packs packs3 WHERE (packs3.TaskMarker = '3' AND packs3.LastmovementTypeID != 0))

当我执行它时,我得到了结果

#1093 - You can't specify target table 'packs' for update in FROM clause

这是什么原因?因为我要更新的是同一个表中的记录,其中在查询返回的列表中找不到我的 ShipmentID:

SELECT ShipmentID FROM packs packs2 WHERE (packs2.TaskMarker = '2' AND packs2.Movementtype != 'Bezorgscan depot' AND packs2.LastmovementTypeID != 0) UNION SELECT ShipmentID FROM packs packs3 WHERE (packs3.TaskMarker = '3' AND packs3.LastmovementTypeID != 0)
4

2 回答 2

3

正如它在http://dev.mysql.com/doc/refman/5.5/en/update.html中所说:“目前,您无法更新表并在子查询中从同一个表中进行选择。”

您需要设计一种解决方法 - 例如,选择一个临时表,然后从那里更新。

于 2013-09-06T12:00:42.023 回答
0

您可以通过以下方式绕过此约束:

UPDATE packs set `LastmovementTypeID` = 9 
WHERE `ShipmentID` IN 
    (SELECT ShipmentID FROM 
        (SELECT ShipmentID FROM packs packs2 
            WHERE (packs2.TaskMarker = '2' AND packs2.Movementtype != 'Bezorgscan depot' AND packs2.LastmovementTypeID != 0) UNION SELECT ShipmentID FROM packs packs3 WHERE (packs3.TaskMarker = '3' AND packs3.LastmovementTypeID != 0)
        ) AS `x`
     );
于 2013-09-06T12:52:37.903 回答