带有更新的 MySQL 多选语句

标签 mysql sql

我需要选择一个 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,但我想我做错了。

最佳答案

您可以使用 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?)

关于带有更新的 MySQL 多选语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24580872/

相关文章:

SQL - 使用字母数字字符排序

sql - 删除具有相同字段值的连续行

javascript - 使用 javascript 显示某个套餐的值(value)(价格)

mysql - 是否可以优化此 mysql 查询?

mysql - 每小时复杂的 SQL 查询

php - (我的)SQL 查询在多个表(某些行、某些列)上搜索多个值

sql - SQL WHERE 子句中的 IF 语句

ORDER BY 中主键的 MySQL 性能问题

mysql - 在右表上有条件地左连接

java - 如何使用selenium webdriver删除mysql中的现有数据