2012-04-04 57 views
0

我的脚本 - :如何在FROM子句中为MYSQL指定更新的目标表?

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 - 您不能指定目标表 'catalog_product_price' 的更新在FROM子句

任何人能向我提供的解决方案对于相同的,因为我试图解决这个链路给出: http://www.mysqlfaqs.net/mysql-faqs/Errors/1093-You-can-not-specify-target-table-comments-for-update-in-FROM-clause 但未能如愿...... plz帮助我..

回答

5

你需要加入表的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 

注意:你的语法非常难读,所以我可能犯了一个错误解释它。无论如何,这是主意,它应该帮助你得到最终答案。

3

存放在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 ...完全是多余的

相关问题