我有两张表itemOrders
和itemUsage
。
itemOrders
有两个字段:item_number
和qty_ordered
itemUsage
有两个字段:item_number
和qty_used
我试图说出我的SQL查询,以便总结两个表中每个项目编号的数量,然后从itemUsage
itemOrders
中的总数
到目前为止,我已经提出了这个问题:
SELECT itemOrders.item_number
,(
SELECT sum(qty_ordered)
FROM itemOrders
GROUP BY itemOrders.item_number
) - (
SELECT sum(qty_used)
FROM itemUsage
GROUP BY itemUsage.item_number
) AS item_total
FROM itemOrders
INNER JOIN itemUsage
ON itemOrders.item_number = itemUsage.item_number
GROUP BY itemOrders.item_number
这里发生的是所有字段都是0。
项目编号" A"显示在" A"的所有实例中订购的总数量为3在itemOrders
表格中,只有在" A"的所有实例中使用的总数量为1。在itemUsage
表中。 sql应该在" A"的1个实例旁边的item_total字段中显示第一个。在item_number字段中。
答案 0 :(得分:1)
问题是您正在创建CARTESIAN PRODUCT
并重复SUM
上的值,只计算分隔的每个值,然后计算LEFT JOIN
两者。如果未使用任何项目,COALESCE
会将NULL
转换为0
SELECT io_total.item_number,
order_total - COALESCE(used_total, 0) as item_total
FROM (SELECT io.item_number, sum(io.qty_ordered) as order_total
FROM itemOrders io
GROUP BY io.item_number
) io_total
LEFT JOIN (SELECT iu.item_number, sum(iu.qty_used) as used_total
FROM itemUsage iu
GROUP BY iu.item_number
) as iutotal
ON io_total.item_number = iutotal.item_number
答案 1 :(得分:0)
好吧,看起来你正在制作三个查询,两个单独的查询,一个用于每个总和,另一个具有不使用的内连接。 尝试
Select itemOrders.item_number, sum(itemOrders.qty_ordered - itemUsage.qty_used) as item_total
from itemOrders INNER JOIN itemUsage
On itemOrders.item_number = itemUsage.item_number
GROUP BY itemOrders.item_number