-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 に答える