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