MySQL查询3表内连接仅返回1行

时间:2016-08-31 00:42:40

标签: mysql magento inner-join

我正在Magento模块中创建一些自定义报告,我正在努力解决这个问题。我已经把SQL放在下面了,基本上,我希望这为“捐赠者”中的每一行返回一行。表。它基本上是获得具有特定属性的产品销售总价值。

SELECT b.entity_id AS 'Car ID', b.car_name AS 'Car Name', b.car_purchase_price AS 'Car Purchased For', SUM(s.price) AS 'Total Sales' 
FROM sales_flat_order_item AS s 
INNER JOIN catalog_product_entity_int AS c ON s.sku = c.entity_id 
INNER JOIN bs_donor AS b ON c.value = b.entity_id 
WHERE c.attribute_id = '971'

这样可行,但只返回1行,即使bs_donor表中大约有20行,它也会返回所有产品的总销售额,而不仅仅是具有该特定属性集的销售额。如果我将其添加到查询的末尾:

AND c.value = '50'

它获取了正确的数据,这正是我所需要的,但显然只是对于ID为' 50'的bs_donor行。或者我设置的任何东西。我假设内部联接中存在错误,并尝试使用嵌套的子查询,但只是迷路了。

我认为这可能是因为我从sales_flat_order_item而不是bs_donor获取数据,但我无法以任何其他方式运行。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以反转联接的顺序,以便首先显示bs_donor表。然后使用LEFT JOIN代替INNER JOIN,以确保bs_donor中的每条记录都显示在结果集中。

SELECT b.entity_id AS 'Car ID',
       SUM(s.price) AS 'Total Sales' 
FROM bs_donor b
LEFT JOIN catalog_product_entity_int c
    ON c.value = b.entity_id
LEFT JOIN sales_flat_order_item s
   ON s.sku = c.entity_id
WHERE c.attribute_id = '971'
GROUP BY b.entity_id
相关问题