Mysql LEFT JOIN与可选关系parent< - >子表无法正常工作

时间:2017-06-21 10:54:30

标签: mysql left-join

将左连接与可选值组合到分组时,我遇到了一些麻烦。

简而言之,我们有

  1. 表儿童用品:目录
  2. 表父关系 - 如果存在!包含父子关系:catalog_product_relation
  3. 桌子仓库:仓库
  4. 表产品和库存:wh_products
  5. 我们正试图获得库存总数量,其中

    • 库存由子产品存储,需要按照
    • 进行求和
    • 如果存在父关系,那么我们应该分组并显示该数据

    更简单

    • 对于没有父母的产品:只需加上数量(已经有效)
    • 对于具有父级的产品:然后按父级标识符汇总和求和
    • 并且最好还从目录中获取父标识符的数据(即正确的名称和sku)

    我希望很清楚......以下查询无效。对我来说,第1步看起来只是在列中获取父ID

    和第2步是对每个简单产品的简单产品的数量和对于所有子简单产品的父产品求和,但显示父数据

    select c.sku as sku,
     IFNULL(pr.parent_id, c.entity_id) as main_id,
     c.type_id as type,
     SUM(CASE WHEN (wh.code='LR') THEN FLOOR(wp.qty) ELSE 0 END) AS 'Loc1',
     SUM(CASE WHEN (wh.code='LS') THEN FLOOR(wp.qty) ELSE 0 END) AS 'Loc2'
     FROM catalog c,
     wh_products wp,
     warehouses wh
     LEFT JOIN catalog_product_relation pr ON pr.parent_id = c.entity_id
     WHERE c.entity_id = wp.product_id and wp.warehouse_id = wh.warehouse_id and wp.qty > 0 
    GROUP BY main_id
    

1 个答案:

答案 0 :(得分:0)

我首先要正确编写JOIN并按SELECT中的列进行汇总:

SELECT c.sku as sku,
       COALESCE(pr.parent_id, c.entity_id) as main_id, c.type_id as type,
       SUM(CASE WHEN wh.code = 'LR' THEN FLOOR(wp.qty) ELSE 0 END) AS Loc1,
       SUM(CASE WHEN wh.code = 'LS' THEN FLOOR(wp.qty) ELSE 0 END) AS Loc2
FROM catalog c LEFT JOIN
     wh_products wp
     ON c.entity_id = wp.product_id LEFT JOIN
     warehouses wh
     ON wp.warehouse_id = wh.warehouse_id AND wp.qty > 0 LEFT JOIN
     catalog_product_relation pr
     ON pr.parent_id = c.entity_id
GROUP BY c.sku, COALESCE(pr.parent_id, c.entity_id), c.type_id;

我不确定这是否可以解决您的问题。如果没有样本数据和期望的结果,就很难遵循逻辑。