gpt4 book ai didi

mysql - 更新查询问题

转载 作者:行者123 更新时间:2023-11-29 00:55:55 26 4
gpt4 key购买 nike

我在 mysql 数据库上有三个表,它们是:

RECHARGE with these columns: rid, uid,res_id, agent_id, batch_id, rcard_order, serialno, email, units, bankid, paydate, slipno, rpin, amtpd, bonus, description, crSender, crSenderId, transaction_ref,rechargeDate, processed

SENT with these columns: sendid, uid, res_id, recipients, volume, ffdaily, message, sender, msgtype, flash, mob_field, wapurl, date

BILL with these columns: bid, uid, email, unitBals, lastusedate

问题是:我想要一个查询,从 RECHARGE 表中的 units 中减去 SENT 表中的 volume 的总和,并使用结果更新 BILL 表上的 >unitBals 列,连接三个表的主键是它们的 uid

我使用了这个查询,但它没有给我相同的答案,就像我自己计算 sum(volume) 并从 sum(units) 中减去它时一样

update bill set unitbals = (SELECT sum( recharge.units ) - sum( sent.volume )
FROM sent, recharge
WHERE sent.uid = recharge.uid)
where email = 'info@dunmininu.com'

最佳答案

这里有两个问题。首先,从你使用sum的事实来看,我认为一个给定的Uid可以有多个Recharge记录,一个给定的Uid可以有多个Sent记录。如果这是真的,那么当你加入时,你不会得到所有的充值加上所有的发送,你得到的是充值和发送的所有组合。

例如,假设对于给定的 Uid,您有以下记录:

Recharge:
Uid Units
42 2
42 3
42 4

Sent
Uid Volume
42 1
42 6

然后是查询

select recharge.units, sent.volume
from recharge, sent
where recharge.uid=sent.uid

会给予

Units  Volume
2 1
2 6
3 1
3 6
4 1
4 6

所以做 sum(units)-sum(volume) 会得到 18-21 = -3。

此外,您没有做任何事情来将发送和充值的 Uid 连接到账单的 Uid。因此,对于任何给定的 Bill,您正在处理所有 uid 的记录。永远不会考虑 Bill 的 Uid。

我想你想要的更像是:

update bill
set unitbals = (SELECT sum( recharge.units ) from recharge where recharge.uid=bill.uid)
- (select sum(sent.volume) from sent where sent.uid=bill.uid)
where email='info@dunmininu.com';

即取这个uid所有充值的总和,减去所有发送的总和。

请注意,这会替换 Unitbals 的旧值。也有可能你想说“unitbals=unitbals +”等。

关于mysql - 更新查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6127038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com