簡體   English   中英

MySQL Join查詢從多個表中的產品中獲取購物車表中的項目總和

[英]MySQL Join Query to get the sum of items in a cart table from products coming from multiple tables

這是我以前的問題的延伸,恰好是因為該項目在另一個表中...

我有4張桌子:

大車

+------------+----------+------------+---------+
| customerid | itemcode | cartactive |  type   |
+------------+----------+------------+---------+
|       9916 | X        | Yes        | Package |
|       9916 | Y        | Yes        | Product |
+------------+----------+------------+---------+

制品

+-------------+------------+
| ProductCode | shipWeight |
+-------------+------------+
| Y           |          1 |
| ITEM1       |          1 |
| ITEM2       |          2 |
| ITEM3       |          1 |
+-------------+------------+

+-------------+
| PackageCode |
+-------------+
| X           |
+-------------+

PackageItems

+-------------+-------------+
| PackageCode | ProductCode |
+-------------+-------------+
| X           | ITEM1       |
| X           | ITEM2       |
| X           | ITEM3       |
+-------------+-------------+

所以基本上但不容易,我試圖獲取購物車中所有物品的總和,我們在這里看到應該是5。

這是我寫的返回“ 不唯一表/別名”的查詢:'products'

Select 
SUM(products.shipWeight) as totalweight 
FROM 
cart 
Left JOIN products  ON products.ProductCode = cart.itemCode
LEFT JOIN packageitems d on cart.itemCode = packageitems.PackageCode
LEFT JOIN products on d.ItemCode = products.ProductCode
 WHERE 
cart.customerId= '9916' AND 
cart.cartActive = 'Yes'

我認為我必須首先找到所有常規產品的總和,然后再找到包裝中的所有項目並計算其運輸成本並將它們加在一起。 我對此有些陌生。 幫助將不勝感激。

由於您要兩次與products表聯接,因此需要使用別名來區分應使用哪個實例。

Select 
    SUM(p2.shipWeight) as totalweight 
FROM cart 
Left JOIN products AS p1 ON p1.ProductCode = cart.itemCode
LEFT JOIN packageitems d on cart.itemCode = d.PackageCode
LEFT JOIN products AS p2 on d.ProductCode = p2.ProductCode
WHERE 
    cart.customerId= '9916' AND 
    cart.cartActive = 'Yes'

DEMO

問題中的SQL中還有其他錯誤:

  1. 當您指定別名dpackageitems ,您不能使用packageitems.PackageCodeON子句,它必須是d.PackageCode
  2. 有沒有itemCodepackageitems ,所以d.itemCode是不對的,應該是d.ProductCode

只需使用OR加入

SQL小提琴演示

我沒有包括SUM所以您可以看到結果。

SELECT c.`itemcode`, pi.`ProductCode`, p.`ProductCode`, p.`shipWeight`
FROM cart c
LEFT JOIN PackageItems pi
       ON c.`itemcode` = pi.`PackageCode`
LEFT JOIN products p
       ON p.`ProductCode` = c.`itemcode`
       OR p.`ProductCode` = pi.ProductCode 
WHERE c.`customerid`= '9916' AND 
c.`cartactive` = 'Yes'

重命名表,並在條件加入時使用別名。

Select SUM(prod2.shipWeight) as totalweight
FROM 
cart
Left JOIN products prod1  ON prod1.ProductCode = cart.itemCode
LEFT JOIN packageitems d on cart.itemCode = d.PackageCode
LEFT JOIN products prod2 on d.ItemCode = prod2.ProductCode
WHERE 
cart.customerId= '9916' AND 
cart.cartActive = 'Yes'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM