【问题标题】:mysql conditional field updatemysql条件字段更新
【发布时间】:2012-12-11 07:55:28
【问题描述】:

我在 CATEGORY TABLE 中有 3 列,用于将预先计算的记录计数存储在另一个表 PRODUCTS 中。

CATEGORY(c_id,name,c30,c31,c32)

c30=新产品计数(值 30) c31 二手产品计数(价值 31) 损坏产品的 c32 计数(值 32)

PRODUCT(p_id,c_id,name,condition)

条件可以是 30,31 或 32。

我正在考虑编写一个单独的 UPDATE 语句,它会更新相应的类别计数。

尽管下面的语句在语法上是错误的,但我正在寻找类似类型的解决方案。

select case product.condition 
when 30 then update category set category.c30=category.c30+1 where category.c_id=product.category3
when 31 then update category set category.c31=category.c31+1 where category.c_id=product.category3
when 32 then update category set category.c32=category.c32+1 where category.c_id=product.category3
end case
from product 
where product.c_id=12

任何建议!

【问题讨论】:

    标签: mysql sql sql-update case


    【解决方案1】:

    你可以这样做:

    UPDATE CATEGORY c
    INNER JOIN
    (
        SELECT 
          c_id,
          SUM(CASE WHEN `condition` = 30 THEN 1 ELSE 0 END) c30,
          SUM(CASE WHEN `condition` = 31 THEN 1 ELSE 0 END) c31,
          SUM(CASE WHEN `condition` = 32 THEN 1 ELSE 0 END) c32
        FROM product
        GROUP BY c_id
    ) p ON c.c_id = p.c_id
    SET c.c30 = p.c30, 
        c.c31 = p.c31,
        c.c32 = p.c32;
    

    SQL Fiddle Demo

    【讨论】:

    • @Mahmoud Gamal,又快又好,我同时看到了您的答案,但执行和验证您的答案需要 1 天时间。现在我可以找到它的完美了。解决方案性能也很快,在一个超过 2 条 lac 记录的大表上查询耗时 0.4998 秒 谢谢。
    【解决方案2】:

    您可以连接两个表,然后在同一个连接查询中更新值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-31
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      相关资源
      最近更新 更多