2010-03-17 46 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); 

我们这里做的是将两个键的值,并使它看起来就像是一个关键。