mysql条件字段更新

标签 mysql sql sql-update case

我在 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

任何建议!

最佳答案

你可以这样做:

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

关于mysql条件字段更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13815886/

相关文章:

sql - 如何插入包含撇号(单引号)的值?

javascript - 更新查询中的值作为 0 或空值输入表中

php - 为列推进区分大小写的 phpNames

java - Native SQL(使用 MySQL)与使用 Hibernate ORM 的性能差异?

java - 如何在HQL中连接多个表

mysql - MySQL 中的无限子类别排序

php - 将其他新闻门户数据导入我们的网站?

android - mysql 和 php 的行数结果相同

php - 在 PHP 中发布 MySQL 加密

mysql - 使用另一个表中的 avg() 进行更新?