2016-03-03 101 views
1

這來獲得項目的總和在車表是一個推廣到我以前的問題,它碰巧是因爲該項目是在另一個表...MySQL的加入查詢從來自多個表

我有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

這是我寫的返回的查詢不是獨特的表/別名:「產品」

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' 

我想我一定怎麼也得先找到的所有常規產品的總和然後找到包中的所有項目,並計算它們的運輸成本,並添加在一起。我對此有點新鮮。幫助將不勝感激。

+0

'產品'表上是否出現'X'包裝代碼?因爲如果那樣的話會產生重複的,因爲會加入'產品'和'包' –

+0

X與產品是分開的。只有包裝物品在產品中。 – NeoSketo

+0

什麼是'package'表格?該查詢不使用它。 – Barmar

回答

0

剛剛加入使用OR

SQL Fiddle Demo

我沒有包括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' 
2

由於您與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,你不能在ON子句中使用packageitems.PackageCode,它必須是d.PackageCode
  2. packageitems沒有itemCode,所以d.itemCode是錯的,應該是d.ProductCode
+0

我不確定這是否正確,結果只有'4',而不是'5'。它只是添加'ITEM1','ITEM2'和'ITEM3',而不是'Y'。 – Barmar

+0

OP說'SUM()= 5',但你可以用我的小提琴來測試它 –

+0

是的,我也有5! Awsome工作 – NeoSketo

0

重命名錶並在連接條件中使用別名。

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' 
+0

這與已經接受的答案有何不同? –

+0

LEFT JOIN packageitems d on cart.itemCode = d.PackageCode中的接受答案仍然是LEFT JOIN packageitems d on cart.itemCode = packageitems.PackageCode – Kurohige