Mysql 多连接查询

标签 mysql

我有下表,希望得到如下结果

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

但是结果并不是我所期望的。

如有任何帮助,我们将不胜感激。

最佳答案

看起来您需要通过 poidporeceived 表进行聚合。您可以为此使用子查询:

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

除了聚合问题之外,您的查询策略看起来是正确的。我还在 podetailsporeceived 表中添加了 COALESCE ,以防 po 中的 id 不匹配任何事情。

关于Mysql 多连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37915177/

相关文章:

php - 如何将产品从 Magento 导出到 Woocommerce?

python - SQLAlchemy:如何正确使用group_by()(only_full_group_by)?

php - 将新变量定义为旧值加 1 的总和

mysql - 如何根据另一个表中的值更新列?

php - 控制mysql第一条记录

mysql - Hibernate 查询比较日期(最多过去 10 个月)

php - codeigniter 事件记录选择查询不起作用

java - 为什么更新mysql用户权限后必须重启服务?

php - 从具有 1 个公共(public)列的 2 个表中获取数据