2010-03-17 41 views
2

我正在做一個查詢以返回存儲在sb_carts表中的所有用戶購物車。存儲在sb_carts中的產品信息通過兩個關鍵字product_sku和school_id引用。它需要參考兩個返回唯一的產品與獨特的庫存水平等MYSQL內部通過兩個鍵加入兩個表

當我執行下面的查詢它返回一行,我期待3行。 我已經嘗試將內部連接分解爲兩個單獨的連接,但這仍然只返回1個結果。僅加入一個密鑰就能獲得理想的結果,但可能會重新調整錯誤的產品。左聯接返回3行,但某些數據丟失特定產品

下面是我在做什麼

 
SELECT sb_carts.product_sku 
FROM sb_carts 
INNER JOIN sb_products ON sb_products.sku = sb_carts.product_sku 
AND sb_products.school_id = sb_carts.school_id 
WHERE sb_carts.order_id = 0 
AND sb_carts.user_id = 2 
GROUP BY sb_carts.cart_id 

完整的查詢看起來簡單的例子像

 
SELECT COUNT(DISTINCT sb_carts.cart_id) as quantity, 
sb_carts.* FROM sb_carts 
INNER JOIN sb_children ON sb_children.child_id = sb_carts.child_id 
INNER JOIN sb_school_entities ON sb_school_entities.school_id = sb_children.school_id 
INNER JOIN sb_products ON sb_products.sku = sb_carts.product_sku 
AND sb_products.school_id = sb_carts.school_id LEFT JOIN sb_houses ON sb_children.house_id = sb_houses.id 
LEFT JOIN sb_refund_cart ON sb_carts.cart_id = sb_refund_cart.cart_id 
WHERE sb_carts.order_id = 0 
AND sb_carts.user_id = 2 
GROUP BY sb_carts.child_id, sb_carts.product_sku, sb_carts.school_id 
ORDER BY sb_children.dob_year, sb_children.dob_month, sb_children.dob_day ASC 

回答

0

的GROUP BY語句與聚合函數一起使用。我沒有看到你的聚合函數?你真的需要這個團隊嗎?

1

問題很可能是GROUP BY。即使購物車中有多個產品,這也會每個購物車ID只返回一條記錄。爲了得到你想要的東西,試試這個:

 
SELECT sb_carts.cart_id, sb_carts.product_sku 
FROM sb_carts 
INNER JOIN sb_products ON sb_products.sku = sb_carts.product_sku 
AND sb_products.school_id = sb_carts.school_id 
WHERE sb_carts.order_id = 0 
AND sb_carts.user_id = 2 
ORDER BY sb_carts.cart_id 

,將返回兩列(車ID和SKU),而不是一個,而對於一個購物車ID的所有項目將出現在查詢連續行。

+0

是的,情況正是如此。如果您使用GROUP BY,MySQL不會強制您使用聚合函數(例如,與MS-SQL不同,例如,該查詢無效) –

1

爲什麼使用Group By聲明?如果您沒有使用Select中的函數,如SumAVG等對您的門廳沒有意義。 因此,請嘗試運行沒有Group By聲明的查詢:-)

希望它有幫助!

Santi! :-)

+0

我的完整查詢利用count將相似產品組合在一起以充當數量。 SELECT COUNT(DISTINCT sb_carts.cart_id)as quantity, – bertsisterwanda

0

Mysql的INNER JOIN多個鍵:

SELECT * from table1 as t1 
INNER JOIN table2 as t2 
ON CONCAT(t1.key1, t2.key2)=CONCAT(t2.key1, t2.key2); 

我們這裏做的是將兩個鍵的值,並使它看起來就像是一個關鍵。