MYSQL查询不更改,从同一列中的值更新值

时间:2012-10-26 15:45:52

标签: php mysql

我在另一篇文章中提出了这个问题,这篇文章有一个基本的查询,但在执行以下任何想法时仍然无法正常工作?

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

因此,如果attribute_id列= 106,则仅更新值列中的值,但仅从value_id列= 703的值列更新

以下查询还会在与attribute_id 106

对应的值字段中更新0
UPDATE mage_catalog_product_entity_varchar 
  SET value = (SELECT value from mage_catalog_product_entity_varchar 
  WHERE attribute_id = 703) WHERE attribute_id = 106;

2 个答案:

答案 0 :(得分: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

看到此情况

答案 1 :(得分: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”,所以where子句我只是应用了你想要的特定属性ID(即:703)。我不知道涉及多少条记录,但它会阻止处理每条记录的“子查询”。