好的,首先,这可能是一个非常复杂的问题,我试图解释清楚,这样你们才能帮助我做到最好。
这是关于我为生产计划部门开发的软件的数据库。首先,我要说明我在这个命令中使用的表,您需要知道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
1. CT0046 T201600022 6
2. CT0047 T201600022 6report
1. R0001 CT0046 T201600022 3
2. R0001 CT0046 T201600022 2问题是,我试图减去工人所做的总数,并显示需要完成的其余工作(我已经做过了),但是报告表中可用的其他陶瓷不会出现(甚至没有工作),在本例中是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_IDRESULT:
CT0046 1DESIRED RESULTS
CT0046 1
CT0047 6显然是因为CT0047没有做任何一件事--
编辑1
如果在transaction_ID中有其他数据表明Ceramic_transaction是不一样的,那么就不应该显示它,所以这就是为什么我的代码在CT.transaction_ID = r.transaction_ID中的原因,我正在尝试展示每个transaction_id上尚未由工作人员完成的陶瓷
发布于 2016-02-17 08:30:16
您的问题是,您需要使用左联接:
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、.)。使用联接你可以在这里读到。的正确语法
https://stackoverflow.com/questions/35451349
复制相似问题