MySQL-多对多关系上的求和

MySQL-多对多关系上的求和,mysql,Mysql,我有以下两个表格: ORDERS_ENTRIES orders_id | products_id | entry_id | quantity 1111 | 14492 | 1 | 1 1112 | 14492 | 1 | 3 及 我正试图通过以下查询查找SUMORDERS_ENTRIES.quantity以及products_stocks的数量: SELECT oe.entry_id as entry, SUM(oe.quantity) as qty, ps.qua

我有以下两个表格:

ORDERS_ENTRIES

orders_id | products_id | entry_id | quantity
1111 | 14492 | 1 | 1
1112 | 14492 | 1 | 3

我正试图通过以下查询查找SUMORDERS_ENTRIES.quantity以及products_stocks的数量:

SELECT 
    oe.entry_id as entry,
    SUM(oe.quantity) as qty,
    ps.quantity as ps_qty
FROM
    ORDERS_ENTRIES oe
    INNER JOIN
        PRODUCT_STOCKS ps
            ON 
                oe.entry_id = ps.entry_id;
WHERE
    oe.products_id = 14492;
GROUP BY
    ps.entry_id;
但是,由于多对多关系,返回的结果会多次计算金额

预期答复:

oe.entry_id | oe.quantity | ps.quantity
1 | 4 | 4
1 | 4 | 2
但我得到了以下答案:

oe.entry_id | oe.quantity | ps.quantity
1 | 8 | 4
1 | 8 | 2

如何执行此操作?

通过观察,您似乎希望首先按条目id汇总订单条目表中的数量,然后将此结果加入产品库存表:

输出:

此处演示:


这是因为在联接表中存在多个匹配记录。可以避免在子查询中使用group by重复

SELECT 
    oe.entry_id as entry,
    oe.qty,
    ps.quantity as ps_qty
FROM
  (SELECT entry_id, SUM(quantity) as qty  FROM ORDERS_ENTRIES GROUP BY  entry_id) AS oe
    INNER JOIN
        PRODUCT_STOCKS ps
            ON 
                oe.entry_id = ps.entry_id;
WHERE
    oe.products_id = 14492;
GROUP BY
    ps.entry_id;
SELECT oe.entry_id,
       oe.qty,
       ps.quantity AS ps_qty
FROM
(
    SELECT entry_id, SUM(quantity) AS qty
    FROM ORDERS_ENTRIES
    GROUP BY entry_id
) oe
INNER JOIN PRODUCT_STOCKS ps
    ON oe.entry_id = ps.entry_id
SELECT 
    oe.entry_id as entry,
    oe.qty,
    ps.quantity as ps_qty
FROM
  (SELECT entry_id, SUM(quantity) as qty  FROM ORDERS_ENTRIES GROUP BY  entry_id) AS oe
    INNER JOIN
        PRODUCT_STOCKS ps
            ON 
                oe.entry_id = ps.entry_id;
WHERE
    oe.products_id = 14492;
GROUP BY
    ps.entry_id;