我有下表,希望得到如下结果
Table po
ID | Date
1 | 20-Jun-2016
Table podetails
ID | poid | itemcode | quantity
1 | 1 | SOAP123 | 100
Table poreceived
ID | poid | itemcode | quantity
1 | 1 | SOAP123 | 20
2 | 1 | SOAP123 | 60
结果应该是:
PO | Date | itemcode | quantity
1 | 20-Jun-2016 | SOAP123 | 80
我所做的是:
SELECT
po.id, podetails.itemcode, poreceived.quantity
FROM
po
LEFT JOIN
podetails ON podetails.poid = po.id
LEFT JOIN
poreceived ON poreceived.poid = podetails.poid
但是结果并不是我所期望的。
如有任何帮助,我们将不胜感激。
最佳答案
看起来您需要通过 poid
对 poreceived
表进行聚合。您可以为此使用子查询:
SELECT po.id, COALESCE(podetails.itemcode, 'NA'), COALESCE(t.quantity, 0)
FROM po
LEFT JOIN podetails
ON podetails.poid = po.id
LEFT JOIN
(
SELECT poid, itemcode, SUM(quantity) AS quantity
FROM poreceived
GROUP BY poid, itemcode
) t
ON t.poid = podetails.poid AND t.itemcode = podetails.itemcode
除了聚合问题之外,您的查询策略看起来是正确的。我还在 podetails
和 poreceived
表中添加了 COALESCE
,以防 po
中的 id 不匹配任何事情。
关于Mysql 多连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37915177/