首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL在多个表的同一ID上最小化和量

MySQL在多个表的同一ID上最小化和量
EN

Stack Overflow用户
提问于 2016-02-17 08:24:00
回答 1查看 47关注 0票数 1

好的,首先,这可能是一个非常复杂的问题,我试图解释清楚,这样你们才能帮助我做到最好。

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

Ceramic_transaction由3列组成:Ceramic_id、transaction_id、amount

report包括:report_id,ceramic_id,transaction_id,while

问题是ceramic_transaction表的数量是客户端所需要的,而report表上的数量是工作人员所做的。

然后,我将给您测试的样本数据。

Ceramic_transaction

代码语言:javascript
复制
 1. CT0046 T201600022 6 
 2. CT0047 T201600022 6

report

代码语言:javascript
复制
 1. R0001 CT0046 T201600022 3
 2. R0001 CT0046 T201600022 2

问题是,我试图减去工人所做的总数,并显示需要完成的其余工作(我已经做过了),但是报告表中可用的其他陶瓷不会出现(甚至没有工作),在本例中是CT0047

代码示例:

代码语言:javascript
复制
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

RESULT

代码语言:javascript
复制
CT0046  1

DESIRED RESULTS

代码语言:javascript
复制
CT0046  1

CT0047  6

显然是因为CT0047没有做任何一件事--

编辑1

如果在transaction_ID中有其他数据表明Ceramic_transaction是不一样的,那么就不应该显示它,所以这就是为什么我的代码在CT.transaction_ID = r.transaction_ID中的原因,我正在尝试展示每个transaction_id上尚未由工作人员完成的陶瓷

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-17 08:30:16

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

代码语言:javascript
复制
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

这个问题来自于使用显式连接语法,您应该始终避免这样做(Table1、table2、.)。使用联接你可以在这里读到。的正确语法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35451349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档