[英]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'
問題中的SQL中還有其他錯誤:
d
到packageitems
,您不能使用packageitems.PackageCode
中ON
子句,它必須是d.PackageCode
。 itemCode
在packageitems
,所以d.itemCode
是不對的,應該是d.ProductCode
。 只需使用OR
加入
我沒有包括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.