我正在 Magento 模块中创建一些自定义报告,我正在努力处理这个模块中的 SQL。我将 SQL 放在下面,基本上,我希望它为“donor”表中的每一行返回一行。它基本上是获取具有特定属性的产品的销售总值。
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 获取数据,但我无法以任何其他方式运行它。
如有任何帮助,我们将不胜感激。
最佳答案
您可以颠倒执行连接的顺序,这样 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
关于MySQL 查询 3 表内部连接只返回 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39239088/