【问题标题】:MySQL Multiple Select Statements With An Update带有更新的 MySQL 多选语句
【发布时间】:2014-08-26 04:20:55
【问题描述】:

我需要选择一个 product_id 的成本值,然后更新该 product_id 的最小值

我不需要合并这两个选择语句,然后运行更新。 我需要从一个字段中获取成本,然后将公式乘以设置我可以卖出的最低价格。

##COST
SELECT value AS cost from catalog_product_entity_decimal
  where attribute_id = 79 and
        entity_id IN (select product_id from catalog_category_product)

##LOWEST
SELECT value AS lowest from catalog_product_entity_decimal
  where attribute_id = 164 and
        entity_id IN (select product_id from catalog_category_product)


update catalog_product_entity_decimal
   set value = (cost+3.5)/.84
   where attribute_id = 164 and
         entity_id IN (select product_id from catalog_category_product);

我该怎么做呢?至少可以说我是 MySQL 新手。
我尝试过 UNION 和 Multiple Selects,但我想我做错了。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以使用 SELECT 作为 UPDATE 语句的子查询:

    UPDATE catalog_product_entity_decimal
    SET value = ( (
        SELECT value
        FROM catalog_product_entity_decimal
        WHERE attribute_id = 79
        AND entity_id IN (select product_id from catalog_category_product)
    ) + 3.5 ) / .84
    

    或者您可以将每次选择的结果存储在用户定义的变量中 (@cost):

    SELECT @cost := `value`
    FROM catalog_product_entity_decimal
    WHERE attribute_id = 79
    AND entity_id IN (select product_id from catalog_category_product);
    
    UPDATE catalog_product_entity_decimal
    SET value = ( @cost + 3.5 ) / .84;
    

    另请参阅:MySQL: Set user variable from result of query

    这两种方法的区别在于,第一种方法是一个查询,而该方法使用两个不同的查询。但是两者都需要一个接一个地执行,以确保变量不会被另一个请求的另一个并发 SELECT/UPDATE 操作覆盖。

    (你在哪里使用lowest?)

    【讨论】:

    • 最低属性 id 是 164,这是我要更新的,而不是成本。我需要得到成本,然后计算以更新最低
    • @Brad 好吧,使用一种建议的方法并编辑它们……
    • 除非我错了,否则我认为你的方法不会奏效。我需要选择 product_id 的成本值,然后更新该 product_id 的最低值。
    猜你喜欢
    • 1970-01-01
    • 2017-09-05
    • 2017-02-18
    • 2017-07-06
    • 2011-06-30
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多