我可以在SQL中使用递归来完成此查询吗?

时间:2019-01-11 16:13:30

标签: mysql sql

我有一个主表和一个子表。主表是零件的主列表,子表是构建零件所需的集合零件。每个子部分都通过ParentID链接到其父部分。

零件或“子零件”有一个ChildID,它指向主要零件清单中它自己的条目。我们使用此链接来获取价格,因为在子表中仅存储ID。

通常,只有标记为“ sub”的零件才存储其价格。 以下查询可用于汇总任何条目的费用,以汇总其子项目列表中所有价格的总和。

我想做的是,如果子部分是PartType = master,那么我想使用相同的查询来汇总其成本,并使用它作为Price。

我知道这是一个非常复杂的问题,这可能吗?

Select *, ifnull(
    (SELECT SUM(main.PricePer * Qty) 
     FROM sub inner join main on sub.ChildID = main.ID 
     where sub.ParentID = main1.PID), 
     0) 
from main as main1

示例:

我们有

主表的第1部分和第4部分作为主部分。第1部分准确地汇总了其总成本,因为它的所有子部分都是指定的子部分。但是第4部分将第1部分作为子部分。这意味着它对PricePer的引用不准确。总计时,它应该对第1部分使用TotalCost,但是要做到这一点,我需要以某种方式嵌套在查询内部使用的查询part1。

ID | Name | TotalCost | PricePer | PartType

1    Part1  10.00       0.00       master 

2    Part2  0.00        6.00       sub

3    Part3  0.00        2.00       sub

4    Part4  4.00        0.00       master    //should be 14.00

第1部分的子表

ParentID | ChildID | Name | Qty

1          2         Part2  1

1          3         Part3  2

第4部分的子表

ParentID | ChildID | Name | Qty

4          1         Part1  1

4          3         Part3  2

0 个答案:

没有答案