0

他のテーブルに結合する UPDATE を実行しようとしていますが、WHERE 句にサブクエリがあります。ただし、次のエラーが発生します。

1093 - FROM 句での更新にターゲット テーブル 'csi' を指定することはできません

これが私のクエリです:

UPDATE mage_cataloginventory_stock_item csi
INNER JOIN mage_catalog_product_entity cpe
ON csi.product_id = cpe.entity_id
SET csi.Is_in_Stock = 0
WHERE cpe.sku IN (
    SELECT cpe.sku
    FROM mage_catalog_product_entity cpe 
    INNER JOIN mage_cataloginventory_stock_item CSI
    ON CSI.product_id = cpe.entity_id
    INNER JOIN mage_cataloginventory_stock_status CISS
    ON CSI.product_id = CISS.product_ID
    INNER JOIN mage_catalog_product_entity_int cpei
    ON cpe.entity_id = cpei.entity_id
    WHERE type_id = 'simple'
    AND cpei.attribute_id = 80
    AND CSI.Qty = 0 AND cpei.value = 1
)

他のソースから、サブクエリで更新されているテーブルを指定できないことがわかりますが、他にそれを行う方法がわかりません.誰かが私を正しい方向に向けて助けて、必要に応じてこれを機能させることができることを願っています. ありがとう!

4

1 に答える 1

1

cpeサブクエリのandCSIcpe2andCSI2または任意の名前に置き換えることができます。

上記は、更新中のテーブルの現在の行をまったく考慮しません。

これはあなたが望むものではないかもしれません。その場合は、次を試してください。

UPDATE mage_cataloginventory_stock_item csi
INNER JOIN mage_catalog_product_entity cpe
ON csi.product_id = cpe.entity_id
SET csi.Is_in_Stock = 0
WHERE cpe.sku IN (
    SELECT cpe.sku
    /* removed joins */
    FROM mage_cataloginventory_stock_status CISS
    INNER JOIN mage_catalog_product_entity_int cpei
    ON cpe.entity_id = cpei.entity_id
    WHERE type_id = 'simple'
    AND cpei.attribute_id = 80
    AND cpei.value = 1
    /* moved join condition here */
    AND cpe.product_id = CISS.product_ID
    AND CSI.Qty = 0
)

いくつかのことに応じて、以下は同じことを行うことができます: (たとえばcpe.sku、一意である必要があります。そうでない場合は、別の結合で動作させることができる場合があります)

UPDATE mage_cataloginventory_stock_item csi
INNER JOIN mage_catalog_product_entity cpe
  ON csi.product_id = cpe.entity_id
INNER JOIN mage_cataloginventory_stock_status CISS
  ON cpe.product_id = CISS.product_ID
INNER JOIN mage_catalog_product_entity_int cpei
  ON cpe.entity_id = cpei.entity_id
SET csi.Is_in_Stock = 0
WHERE type_id = 'simple'
  AND cpei.attribute_id = 80
  AND cpei.value = 1
  AND CSI.Qty = 0
于 2013-02-07T22:07:38.873 に答える