MySQL查询统计并关联更新

做项目的时候遇到一个问题,但又不想写代码去实现,因为遵循一个原则:能用SQL语句尽量不写代码。


例子:

A表(cid)

B表(cid, cnum)


A表cid会重复,把相同的分组统计出现次数出来,再存入B表对应的cnum,B表的cid不重复。


MySQL语句:

UPDATE b
SET b.`cnum` = (SELECT c.counts
                FROM
                  (SELECT
                     cid,
                     COUNT(*) counts
                   FROM a
                   GROUP BY cid) c
                WHERE b.`cid` = c.`cid`);



实际情景:

因为项目新增了一个功能,所以要相关的数据同步,便使用MySQL语句来解决。


think_orders(order_id, price, residue) 省略N个字段......

think_take_log(order_id, take)


订单是一个红包,别人领取到对应减少剩余的金额,但之前功能上没有做,所以现在补上,相关数据要同步,需要把数据更新下再同步功能上去。


# 更新剩余金额
UPDATE `think_orders` o
SET o.`residue` = o.`price` - IFNULL((SELECT tl.`sum`
                   FROM (SELECT
                           `order_id`,
                           SUM(`take`) `sum`
                         FROM `think_take_log`
                         GROUP BY `order_id`) tl
                   WHERE o.`order_id` = tl.`order_id`), 0);

用到的MySQL函数:ISNULL(字段名, 默认值)

因为可能有的红包未被领取,即take_log中无记录,统计出来的数据为空了会出错,所以要ISNULL判断处理一下结果。

猜你喜欢

转载自blog.csdn.net/maoxinwen1/article/details/79447393
今日推荐