2012-04-04 54 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 ...完全是多餘的

相關問題