问题: 3个表:tbl_product,tbl_soldproducts,tbl_purchasedetail tbl_product有一个prod_no的主键,它是每个2表上的外键。 tbl_products tbl_purchasedetail tbl_soldproducts
在tbl_soldproducts中,我有列item_sold描述每个交易为此产品销售的商品数量。 在tbl_purchasedetail中,我有qty_purchase,它描述了每笔交易的商品购买数量。 我需要计算每件商品的销售和购买总数。 出口输出:
Prod no | item_sold |qty_purchase | left
1 | 23 | 25 | 2
2 | 1 | 10 | 9
我当前显示错误输出的代码:
SELECT TP.prod_no,TP.barcode,TP.prod_name, COUNT(TS.qty) as num_sold,
COUNT(TPS.qty_delivered) as num_delivered
FROM tbl_product AS TP
LEFT JOIN tbl_soldproducts AS TS
on (TS.prod_no = TP.prod_no)
LEFT JOIN tbl_purchasedetail AS TPS
on (TPS.prod_no = TP.prod_no)
group by TS.prod_no
ORDER BY TP.prod_name
答案 0 :(得分:1)
您从未向我们展示任何示例数据,但我认为您应该在单独的子查询中聚合两个辅助表,然后将这些结果加回tbl_product
。这样的事情应该有效:
SELECT TP.prod_no,
TP.barcode,
TP.prod_name,
COALESCE(TS.num_sold, 0) AS num_sold,
COALESCE(TPS.num_delivered, 0) AS num_delivered
FROM tbl_product TP
LEFT JOIN
(
SELECT prod_no, COUNT(*) AS num_sold
FROM tbl_soldproducts
GROUP BY prod_no
) TS
ON TP.prod_no = TS.prod_no
LEFT JOIN
(
SELECT prod_no, COUNT(*) AS num_delivered
FROM tbl_purchasedetail
GROUP BY prod_no
) TPS
ON TP.prod_no = TPS.prod_no
ORDER BY TP.prod_name
如果您要从tbl_product
中选择的只是产品编号,那么原始查询可能没问题。但是您的查询可能会有奇怪的行为,因为您在使用tbl_product
时从GROUP BY
选择非聚合列。如果你想选择其他列,你应该采用我建议的方法。
答案 1 :(得分:0)
你最好给我们一个数据库案例。 @Tim Biegeleisen那是对的