我在另一篇文章中提出了这个问题,这篇文章有一个基本的查询,但在执行以下任何想法时仍然无法正常工作?
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
对应的值字段中更新0UPDATE mage_catalog_product_entity_varchar
SET value = (SELECT value from mage_catalog_product_entity_varchar
WHERE attribute_id = 703) WHERE attribute_id = 106;
答案 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)。我不知道涉及多少条记录,但它会阻止处理每条记录的“子查询”。