Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用联接和子查询更新表_Mysql - Fatal编程技术网

Mysql 使用联接和子查询更新表

Mysql 使用联接和子查询更新表,mysql,Mysql,我正在尝试运行一个连接到其他表的更新,并且在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 (

我正在尝试运行一个连接到其他表的更新,并且在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
)

我从其他来源了解到,您无法在子查询中指定要更新的表,但我不知道其他方法。。希望有人能帮我指出正确的方向,让这个工作,因为我需要。谢谢

您可以将子查询中的
cpe
CSI
替换为
cpe2
CSI2
或您选择的任何名称

以上内容根本不会考虑您更新的表的当前行

这可能不是你想要的。在这种情况下,请尝试:

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
必须是唯一的,否则您可以让它与另一个连接一起工作)


非常感谢你。后一个查询工作正常。有时,我会被过度复杂的sql所困扰。。需要一双额外的眼睛:)
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