问题: 3 个表:tbl_product、tbl_soldproducts、tbl_purchasedetail tbl_product 有一个主键 prod_no,它是 2 个表中每个表的外键。 表产品 tbl_purchaseddetail tbl_已售产品
在 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
中选择的只是产品编号,那么您的原始查询可能没问题。但您的查询可能会出现奇怪的行为,因为您在使用 GROUP BY
时从 tbl_product
选择非聚合列。如果您还想选择其他列,则应该采用我建议的方法。
关于php - 添加来自不同表的每一行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41560880/