使用其他列的值更新列

s3fp2yjn  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(304)

我想把特价升级到magento 2中的现有价格。我该怎么做?
价格和特殊价格属性都存储在表catalog\u product\u entity\u decimal中,属性代码为74和75。
目录\产品\实体\小数表
现在我必须将1349(entity\u id=9773和attribute\u id=75的值)更新为1619(entity\u id=9773和attribute\u id=74的值)
类似地,希望将entity_id=9774和attribute_id=75的值从1349更新为1619。
对于每个属性id,每个实体可能有不同的值。
我需要sql update语句来一次性更新表中200000个实体的值。此sql将在一条sql语句中为magento 2中的所有产品互相更新价格和特价。
我尝试运行此sql,但不起作用:

UPDATE catalog_product_entity_decimal val
SET val.value = (SELECT value FROM catalog_product_entity_decimal WHERE attribute_id = '74' and entity_id='9773')
WHERE val.attribute_id = '75' and val.entity_id='9773'

错误为“select不能来自同一个表”

atmip9wb

atmip9wb1#

您可以尝试使用内部连接

UPDATE catalog_product_entity_decimal val
  INNER JOIN catalog_product_entity_decimal val2 ON val.attribute_id = '75' 
        and val.entity_id ='9773'
          and val2.attribute_id = '74' and val2.entity_id='9773'
  SET val.value = val2.value

或者基于subselect的内部连接

UPDATE catalog_product_entity_decimal val
  INNER JOIN ( select  value, attribute_id, entity_id 
    from  catalog_product_entity_decimal val2
    where  val21.attribute_id = '74' and val2.entity_id='9773'
  ) t ON val.attribute_id = '75' 
        and val.entity_id ='9773'
  SET val.value = t.value

对于所有实体,您必须在连接条件中使用此列

UPDATE catalog_product_entity_decimal val
  INNER JOIN catalog_product_entity_decimal val2 ON val.attribute_id = '75' 
          and val2.attribute_id = '74' 
            and val2.attribute_id = val.attribute_id 
  SET val.value = val2.value

或者

UPDATE catalog_product_entity_decimal val
  INNER JOIN ( select  value, attribute_id, entity_id 
    from  catalog_product_entity_decimal val2
    where  val21.attribute_id = '74' 
  ) t ON val.attribute_id = '75' 
        and val2.attribute_id = t.attribute_id 
  SET val.value = t.value

相关问题