2012-10-26 51 views
0

我在另一個帖子上問這個問題,我有一個基本的查詢,但仍然沒有工作時執行以下什麼都沒有發生任何想法?MYSQL查詢不更改,更新值從同一列

UPDATE mage_catalog_product_entity_varchar 
    SET value = (SELECT value WHERE attribute_id = 703) 
    WHERE attribute_id = 106; 

所以我在值列更新值,如果attribute_id列= 106,但只從值列更新其中attribute_id列= 703

以下查詢也是在值字段更新0對應於attribute_id 106

UPDATE mage_catalog_product_entity_varchar 
    SET value = (SELECT value from mage_catalog_product_entity_varchar 
    WHERE attribute_id = 703) WHERE attribute_id = 106; 
+1

內部'select'不需要'FROM'子句嗎?或者我錯過了什麼? –

回答

1

您在子查詢中缺少From子句。你可以重新檢查一次

UPDATE mage_catalog_product_entity_varchar 
    SET value = (SELECT value WHERE attribute_id = 703) 
    WHERE attribute_id = 106; 

應當(如果在內部查詢直接使用MySQL不更新表)

UPDATE mage_catalog_product_entity_varchar a, 
    mage_catalog_product_entity_varchar b 
    SET a.value = b.value WHERE a.attribute_id = 106 
    AND b.attribute_id = 703; 

您也可以找到關於SQL Fiddle 1

解決方案

MySQL給出錯誤「無法在FROM子句中更新指定目標表'table_name'」有關此錯誤的更多信息,可以訪問主題

MySQL #1093 - You can't specify target table 'giveaways' for update in FROM clause

如果你將不得不在表中的多個條目討論對應屬性ID 703,那麼該查詢將採取從值插入第一個記錄,其他人會被忽略。

您可以在這裏看到這種情況SQL Fiddle 2

+0

唯一的問題是你不能從括號內選擇 –

+0

我修改了我的解決方案。請立即檢查。 – Vivek

0

你也可以做它作爲一個相關的更新,無需子選擇如

UPDATE mage_catalog_product_entity_varchar, 
     mage_catalog_product_entity_varchar WantFromHere 
    SET value = WantFromHere.value 
    WHERE attribute_id = 106 
    AND WantFromHere.attribute_id = 703; 

但是,因爲你的「等」表是一個特定的屬性並不是真正的「JOIN」,我剛纔應用了你想要的特定屬性ID的where子句(即:703)。我不知道涉及多少條記錄,但是它可以防止每個記錄的「子查詢」被處理。