来自2个不同表的MySQL SELECT,其中2个表上有WHERE子句,1个结果为NULL

问题描述 投票:0回答:1

我想在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上查询,这只是在一张桌子上,它没有为sku 35870拉total_qty,因为它还没有在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中的总计。这个结果看起来总结了shipping_table的整个qtys。

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
mysql join select left-join outer-join
1个回答
0
投票

使用标量子查询

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' 
© www.soinside.com 2019 - 2024. All rights reserved.