【问题标题】:MYSQL Query not changing, updating value from value in same columnMYSQL查询不改变,从同一列中的值更新值
【发布时间】:2012-10-26 15:45:51
【问题描述】:

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

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

因此,如果 attribute_id 列 = 106,我将更新 value 列中的值,但仅从 attribute_id 列 = 703 的 value 列更新

下面的查询也会更新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;

【问题讨论】:

  • 内部select不需要FROM子句吗?还是我错过了什么?

标签: php mysql


【解决方案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 - You can't specify target table 'giveaways' for update in FROM clause

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

你可以在这里看到这种情况SQL Fiddle 2

【讨论】:

  • 唯一的问题是你不能从括号内选择
  • 我已经修改了我的解决方案。请立即检查。
【解决方案2】:

您也可以在没有子选择的情况下将其作为相关更新来完成,例如

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)。我不知道涉及多少条记录,但它确实阻止了要处理的每条记录的“子查询”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 2013-08-27
    • 2021-08-22
    • 2014-10-29
    • 2014-12-08
    • 1970-01-01
    • 2021-01-06
    相关资源
    最近更新 更多