2017-04-19 27 views
0

に多くの合計I持って次の2つの表:MySQLの - 多くの関係

ORDERS_ENTRIES 

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

そして

PRODUCT_STOCKS 

products_id | entry_id | quantity 
14492 | 1 | 4 
14492 | 1 | 2 

私はSUM(ORDERS_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 

はどうすればこれを行うことができますか?観察することにより

答えて

1

、あなたの最初のentry_idによってORDERS_ENTRIES表に数量を集計し、その後PRODUCT_STOCKSテーブルにこの結果を参加したいことが表示されます:

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 

出力:

enter image description here

デモ:

Rextester

0

これは、結合テーブルに複数の一致するレコードがあるためです。サブクエリでグループバイとの重複を避けることができます

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;