我有两个表 itemOrders
和 itemUsage
.
itemOrders
有两个字段: item_number
和 qty_ordered
itemUsage
有两个字段: item_number
和 qty_used
我正试图说出我的SQL查询,以便它总结两个表中每个项目编号的数量,然后从 itemOrders
减去 itemUsage
中的总计
到目前为止我已经想出了这个:
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"在 itemOrders
表中的所有"A"实例中显示的总数量为3,并且 itemUsage
表格中所有"A"实例的总数量均为1 . sql应该在item_number字段中的"A"的1个实例旁边的item_total字段中显示第一个 .
2 回答
问题是你正在创建一个
CARTESIAN PRODUCT
并重复SUM
上的值,只需计算每个分开的值,然后再计算LEFT JOIN
. 如果没有使用任何项目COALESCE
将NULL
转换为0
好吧,看起来你正在制作三个查询,两个单独的查询,一个用于每个总和,另一个具有未使用的内部联接 . 尝试