mysql two table join sum not equal result

时间:2016-09-10 15:23:33

标签: mysql

I have two tables purchase_orders_details and stock_orders_details I show in below of my paragraph

purchase_orders_details

--------------------
item_id | item_qty |
--------------------
|   1   |    15    |
|   2   |    10    |
|   1   |    20    |
--------------------

stock_orders_details
------------------------
item_id | item_rcv_qty |
------------------------
|  1 |       10        |
|  2 |        5        |
|  1 |       15        |
------------------------

The query example is:

SELECT * FROM purchase_orders_details p 
left join stock_details d on p.item_qty=d.item_rcv_qty 
WHERE d.item_rcv_qty IS NULL

I want to result like this, and only result show who not matched with item_qty not equal item_rcv_qty because when both quantity is equal then order will be completed.

-------------------------------------------------
Item Id  | Item Quantity  |  Received Quantity |
-------------------------------------------------
|   1    |   35           |      25            |
|   2    |   10           |       5            |
-------------------------------------------------

2 个答案:

答案 0 :(得分:0)

您的预期输出看起来好像只汇总了每个item_id的料品数量和料品收货数量。如果是这样,那么解决这个问题的一种方法是将两个子查询连接在一起,计算所需的聚合。

SELECT t1.item_id,
       t1.item_qty AS item_quantity,
       COALESCE(t2.item_rcv_qty, 0) AS receieved_quantity
FROM
(
    SELECT item_id, SUM(item_qty) AS item_qty
    FROM purchase_orders_details
    GROUP BY item_id
) t1
LEFT JOIN
(
    SELECT item_id, SUM(item_rcv_qty) AS item_rcv_qty
    FROM stock_orders_details
    GROUP BY item_id
) t2
    ON t1.item_id = t2.item_id

答案 1 :(得分:0)

我运行查询并返回此数组

Array
(
    [0] => stdClass Object
      (
        [item_id] => 1
        [item_quantity] => 5
        [receieved_quantity] => 5
    )

[1] => stdClass Object
    (
        [item_id] => 2
        [item_quantity] => 11
        [receieved_quantity] => 1
    )

[2] => stdClass Object
    (
        [item_id] => 3
        [item_quantity] => 2
        [receieved_quantity] => 0
    )

)

第一个数组已完成receieved_quantity但是他在数组中显示,现在我只想要那些记录不完整的记录。