mysql - SQL 查询左连接 where 子句

标签 mysql sql join

这是我的情况。

我有3张 table

Orders
 - id  status deleted

Order Lines
 - related_id related_model quantity

Products
 - id  code  price  price_purchase

我想创建一个包含所有产品的列表。 购买次数毛利率之和 (price - price_purchase)。它只能使用 相关模型设置为“产品” 的订单行。其次,它必须只挑选 status 设置为 'paid, processing, sent, ready_for_pickup or picked_up' 且订单未删除的订单。

这就是我想要的结果:

id | code  | purchases | value
-------------------------------
1  | code1 | 7         | 57,05
2  | code2 | 122       | 254,98
3  | code3 | 0         | 0,00

这是我目前的 SQL 查询:

SELECT p.id, p.code, IFNULL(SUM(sol.quantity) , 0) as purcahses,     
sum((p.price - p.price_purchase) * quantity) as value
FROM products p
LEFT JOIN shop_orders_lines sol ON sol.related_id = p.id 
AND sol.related_model = 'products'
LEFT JOIN shop_orders so ON so.id = sol.order_id 

WHERE so.status IN ('paid', 'processing', 'sent', 'ready_for_pickup', 'picked_up')
AND so.deleted = 0  
GROUP BY p.id

它返回正确的数据。但不是所有的问题。那是我的问题。我有很多不同的方法,如子查询和其他方法,但似乎无法解决问题。我知道问题出在我的 LEFT 连接上,但不知道我的问题的解决方案。

我正在使用 MySQL Workbench。

欢迎任何帮助。

最佳答案

你的连接是错误的。在使用产品详细信息形成 LEFT JOIN 之前,您需要确定要单独考虑的订单行。内联 View 可能会有所帮助:

  SELECT
    p.id,
    p.code,
    IFNULL(SUM(ordered_item.quantity) , 0) as purchases ,     
    sum((p.price - p.price_purchase) * ordered_item.quantity) as value
  FROM
   products p
   LEFT JOIN (
      SELECT
        sol.related_id AS related_id,
        sol.quantity AS quantity
      FROM
        shop_orders_lines sol
        INNER JOIN shop_orders so
          ON so.id = sol.order_id
      WHERE
        so.status IN ('paid', 'processing', 'sent', 'ready_for_pickup', 'picked_up')
          AND so.deleted = 0
          AND sol.related_model = 'products'  
    ) ordered_item
      ON ordered_item.related_id = p.id
GROUP BY p.id

关于mysql - SQL 查询左连接 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29279857/

相关文章:

php - 变量范围是否导致我的功能出现故障?

php - 查询结果的输出显示的行数多于应有的行数

sql - 在sql中将指数转换为数字

mysql - 如何使用 JOIN 加速复杂的 SQL 查询

mysql - 在子查询中引用查询结果别名

mysql - 当并非所有数据点都匹配时合并 mySQL 中的数据

MySQL 层次结构 - 只显示非父级的子级

C# : how can i control the percentage of work done while dumping with mysqldump?

php - Doctrine 不会使用 ->select 提取日期时间字段

ruby-on-rails - 我们应该写依赖: destroy on a join table model?