0

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

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

因此,如果attribute_id 列= 106,我将更新值列中的值,但仅从attribute_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;
4

2 回答 2

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 报错“ You can't specify target table 'table_name' for update in FROM Clause ” 要了解更多关于这个错误的信息,你可以访问主题

MySQL #1093 - 您不能在 FROM 子句中指定目标表“赠品”进行更新

如果您在讨论的表中有多个条目对应于属性 id 703,则查询将从插入的第一条记录中获取值,而另一个将被忽略。

你可以在这里看到这个条件SQL Fiddle 2

于 2012-10-26T15:48:07.433 回答
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)。我不知道涉及多少条记录,但它确实阻止了要处理的每条记录的“子查询”。

于 2012-10-26T16:14:57.667 回答