【问题标题】:How to specify target table for update in FROM clause for MYSQL?如何在 MYSQL 的 FROM 子句中指定要更新的目标表?
【发布时间】:2012-04-18 07:27:33
【问题描述】:

我的脚本-:

UPDATE catalog_product_price 
SET catalog_product_price.value = 200
WHERE value_id = (
    SELECT value_id
    FROM catalog_product_price
    WHERE `entity_id` = ( 
        SELECT `entity_id` 
        FROM `catalog_product_entity` 
        WHERE `sku` LIKE 'sample'
        ) 
    AND website_id = 10
    AND customer_group_id= (
        SELECT customer_group_id
        FROM customer_group
        WHERE 
            customer_group_id = catalog_product_price.customer_group_id 
            AND customer_group_code =100
        )
    )

它给了我以下错误-:

#1093 - 您不能在 FROM 子句中指定目标表 'catalog_product_price' 进行更新

任何人都可以为我提供与我在此链接上尝试的解决方案相同的解决方案吗? http://www.mysqlfaqs.net/mysql-faqs/Errors/1093-You-can-not-specify-target-table-comments-for-update-in-FROM-clause 但做不到... 请帮帮我..

【问题讨论】:

    标签: mysql sql clause


    【解决方案1】:

    您需要将表连接到 UPDATE 语句,而不是使用所有这些子查询

    UPDATE  catalog_product_price cpp
    
    JOIN    catalog_product_entity cpe
      ON    cpe.entity_id = cpp.entity_id
      AND   cpe.sku LIKE 'sample'
      AND   website_id = 10
    
    JOIN    customer_group cg
      ON    cg.customer_group_id = cpp.customer_group_id
      AND   cg.customer_group_code = 100
    
    SET cpp.value = 200
    

    注意:您的语法很难阅读,所以我可能在解释它时出错了。无论如何,这就是想法,它应该可以帮助您获得最终答案。

    【讨论】:

      【解决方案2】:

      将查询到的值存入user defined variables:

      set @value_id := (
          SELECT value_id
          FROM catalog_product_price
          WHERE `entity_id` = ( 
              SELECT `entity_id` 
              FROM `catalog_product_entity` 
              WHERE `sku` LIKE 'sample'
          );
      set @customer_group_id := (
          SELECT customer_group_id
          FROM catalog_product_price
          WHERE `entity_id` = ( 
              SELECT `entity_id` 
              FROM `catalog_product_entity` 
              WHERE `sku` LIKE 'sample'
          );
      
      UPDATE catalog_product_price 
      SET catalog_product_price.value = 200
      WHERE value_id = @value_id 
      AND website_id = 10
      AND customer_group_id = @customer_group_id;
      

      请注意,您的第二个内部查询是无稽之谈 - 您选择的列 customer_group_id 由于 where 子句 WHERE customer_group_id = catalog_product_price.customer_group_id... 完全多余,因此其值已知。

      【讨论】:

        猜你喜欢
        • 2020-09-12
        • 2016-02-07
        • 1970-01-01
        • 1970-01-01
        • 2014-07-19
        • 2015-09-15
        • 2011-05-24
        相关资源
        最近更新 更多