繁体   English   中英

将不同表中的每一行值相加

[英]adding each row value from different table

问题:3个表:tbl_product,tbl_soldproducts,tbl_purchasedetail tbl_product有一个主键prod_no,它是2个表中每个表的外键。 tbl_products tbl_products tbl_purchasedetail tbl_purchasedetail tbl_soldproducts 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 BYtbl_product中选择非聚合列。 如果您还希望选择其他列,则应采用我建议的方法。

您最好给我们一个数据库案例。 @Tim Biegeleisen没错

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM