gpt4 book ai didi

MySQL从多个表中减去相同ID的总和

转载 作者:搜寻专家 更新时间:2023-10-30 23:40:54 25 4
gpt4 key购买 nike

好吧,首先这可能是一个非常复杂的问题,我会尽量解释清楚,以便你们能最好地帮助我。

这是关于我为生产计划部门开发的软件的数据库。首先我要说明我在这个命令中使用的表,有 4 个表你需要知道:ceramic_transaction(这意味着有陶瓷和交易表)和报告表


Ceramic_transaction 由 3 列组成:Ceramic_id、transaction_id、金额

report 包含:report_id, ceramic_id, transaction_id, amount

ceramic_transaction 表中的金额是客户需要的金额,而report 表中的金额是工作人员完成的金额。

然后我会给你测试的样本数据

Ceramic_transaction

 1. CT0046 T201600022 6 
2. CT0047 T201600022 6

报告

 1. R0001 CT0046 T201600022 3
2. R0001 CT0046 T201600022 2

问题是,我试图减去 worker 已完成的总量并显示需要完成的其余部分(我已经完成),但报告表中可用的其他陶瓷不会显示(甚至没有工作的那个),在本例中是 CT0047

代码示例:

SELECT CT.CERAMIC_ID , IF(CT.CERAMIC_ID = R.CERAMIC_ID, CT.AMOUNT - SUM(R.AMOUNT), CT.AMOUNT) as needs
FROM CERAMIC_TRANSACTION CT, REPORT R
WHERE CT.CERAMIC_ID = R.CERAMIC_ID AND CT.TRANSACTION_ID = R.TRANSACTION_ID GROUP BY CT.CERAMIC_ID

结果:

CT0046  1

期望的结果:

CT0046  1

CT0047 6

显然因为 CT0047 没有完成其中任何一个

编辑 1

如果 Ceramic_transaction 中还有其他数据表明 transaction_ID 不相同,则不应显示,这就是为什么我的代码位于 CT.transaction_ID = r.transaction_ID,我试图在每个 transaction_id

上显示工作人员尚未完成的 Ceramic

最佳答案

您的问题是您需要使用左连接:

SELECT CT.CERAMIC_ID ,
IF(CT.CERAMIC_ID = R.CERAMIC_ID, CT.AMOUNT - SUM(R.AMOUNT), CT.AMOUNT) as needs
FROM CERAMIC_TRANSACTION CT
LEFT OUTER JOIN REPORT R
ON (CT.CERAMIC_ID = R.CERAMIC_ID
AND CT.TRANSACTION_ID = R.TRANSACTION_ID)
WHERE CT.transaction_id = 'T201600022'
GROUP BY CT.CERAMIC_ID

此问题来自于使用显式连接语法,您应始终避免这样做(表 1、表 2、...)。使用正确的连接语法 that you can read about here.

关于MySQL从多个表中减去相同ID的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451349/

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