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

标签 mysql magento inner-join

我正在 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/

相关文章:

mysql - jdbc中触发

php - 从最近的订单日期算起

mysql - 三个表的关系顺序是正确的,但值是错误的

MySQL 查询 - 赚取超过平均工资

MySQL:选择全部,除非一列包含一个特定值而另一列包含另一个特定值

php - 如何防止将重复条目添加到数据库表中?

magento - 如何在 Magento 中关闭 PayPal IPN?

php - magento cron 作业和 cron_scheduler 表

php - 加入到creditmemo_flat_table

mysql - 仅返回最大值小于指定值的行