MySQL SELECT из 2 разных таблиц с предложением WHERE для 2 таблиц и 1 результатом NULL - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь получить заказанное количество в таблице cart_items и отправленное количество в shipping_table. Проблема в том, что некоторые skus еще не отправлены, и я могу либо A) только вытащить отправленные товары, либо B) не иметь правильного общего количества отправленного кол-ва.

ОБРАЗЦЫ ДАННЫХ

`shipping_table`    
id  |  invoice  | sku   | qty  | order_id
99  |   104     | 15628 |  1   |  9313
98  |   104     | 34929 |  2   |  9313
97  |   103     | 34929 |  1   |  9313
96  |   102     | 15628 |  87  |  9999
95  |   101     | 34929 |  32  |  9999
94  |   100     | 35870 |  6   |  9999


`cart_items`    
id     |  cart_id | sku   | qty
64903  |  4935153 | 15628 |  1  
65108  |  4935153 | 34929 |  4  
65109  |  4935153 | 35870 |  4  

В этом результате мы должны увидеть, что sku 35870 не отправил никаких товаров, 15628 отправил, и sku 34929 отправил только 3 товара.

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

sku   | total_qty | total_shipped_qty
15628 |      1    |          1
34929 |      4    |          3
35870 |      4    |          NULL   

НЕПРАВИЛЬНЫЙ РЕЗУЛЬТАТ A

Это близко, но так как я запрашиваю order_id, который находится только в одной таблице, он не тянет total_qty для sku 35870, потому что он еще не в shipping_table (он не поставляется вообще).

SELECT 
    CT.sku, 
    MT.`qty` as total_qty, 
    SUM(CT.`qty`) as total_shipped_qty 
FROM `shipping_table` CT 
        LEFT JOIN 
     `cart_items` MT ON MT.sku = CT.sku 
WHERE MT.`cart_id` = '4935153' AND CT.`order_id` = '9313'
GROUP BY MT.sku

sku   | total_qty | total_shipped_qty
15628 |      1    |          1
34929 |      4    |          3

НЕПРАВИЛЬНЫЙ РЕЗУЛЬТАТ B

Вот что-то близкое, но это неверные значения total_shipped_qty, потому что он смотрит на Итог в целом shipping_table. Этот результат выглядит так, как будто он суммирует ВЕСЬ qtys для shipping_table.

SELECT 
    CT.sku, 
    MT.`qty` as total_qty, 
    SUM(CT.`qty`) as total_shipped_qty 
FROM `shipping_table` CT 
        LEFT JOIN 
     `cart_items` MT ON MT.sku = CT.sku 
WHERE MT.`cart_id` = '4935153'
GROUP BY MT.sku

sku   | total_qty | total_shipped_qty
15628 |      1    |          88
34929 |      4    |          35
35870 |      4    |          6

1 Ответ

0 голосов
/ 15 марта 2019

Использовать скалярный подзапрос

DEMO

SELECT 
     CT.sku, 
     qty as total_qty, 
    (select SUM(qty) from shipping_table MT where CT.sku=MT.sku group by MT.sku) 
    as total_shipped_qty 
FROM cart_items CT
      WHERE CT.cart_id = '4935153' 
...