1

次のクエリがあります。

SELECT entity_id AS product_id FROM catalog_product_entity cpe
LEFT JOIN cataloginventory_stock_item csi ON csi.product_id = cpe.entity_id
WHERE cpe.type_id = 'configurable'
AND csi.is_in_stock = 0
AND (SELECT SUM(qty) FROM catalog_product_relation cpr LEFT JOIN cataloginventory_stock_item cisi ON cisi.product_id = cpr.child_id WHERE cpr.parent_id = cpe.entity_id) > 0

次の結果が返されます。

product_id
-----------
912
906
894
559
364

上記のクエリの結果に存在するテーブルの product_id に基づいて、テーブルis_in_stock内の列を更新しようとしています。cataloginventory_stock_item

私がやろうとしたことはこれでした:

UPDATE cataloginventory_stock_item
SET is_in_stock = 1
WHERE product_id IN (
    SELECT entity_id AS product_id FROM catalog_product_entity cpe
    LEFT JOIN cataloginventory_stock_item csi ON csi.product_id = cpe.entity_id
    WHERE cpe.type_id = 'configurable'
    AND csi.is_in_stock = 0
    AND (SELECT SUM(qty) FROM catalog_product_relation cpr LEFT JOIN cataloginventory_stock_item cisi ON cisi.product_id = cpr.child_id WHERE cpr.parent_id = cpe.entity_id) > 0
)

そして、次のエラーが表示されます。
You can't specify target table 'cataloginventory_stock_item' for update in FROM clause

クエリを再構築して機能させる方法がわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

1

選択したクエリにエイリアスを指定して、これを試してください

UPDATE cataloginventory_stock_item
SET is_in_stock = 1
WHERE product_id IN (
SELECT   new_table.product_id  FROM (

 SELECT entity_id AS product_id FROM catalog_product_entity cpe
    LEFT JOIN cataloginventory_stock_item csi ON csi.product_id = cpe.entity_id
    WHERE cpe.type_id = 'configurable'
    AND csi.is_in_stock = 0
    AND (SELECT SUM(qty) FROM catalog_product_relation cpr LEFT JOIN cataloginventory_stock_item cisi ON cisi.product_id = cpr.child_id WHERE cpr.parent_id = cpe.entity_id) > 0
) new_table

)
于 2013-09-27T17:55:54.170 に答える