[英]adding each row value from different table
问题: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
您从未向我们显示任何样本数据,但我认为您应该将两个辅助表聚合到单独的子查询中,然后将这些结果重新添加到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
产品编号,则原始查询可能还可以。 但是您的查询可能tbl_product
产生奇怪的行为,因为您正在使用GROUP BY
从tbl_product
中选择非聚合列。 如果您还希望选择其他列,则应采用我建议的方法。
您最好给我们一个数据库案例。 @Tim Biegeleisen没错
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.