首页 > 解决方案 > 我可以在 sql 中使用递归来完成这个查询吗?

问题描述

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

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

很多时候,只有标记为 sub 的零件才会存储其价格。下面的这个查询用于汇总任何条目的成本,总计其子项目列表中所有价格的总和。

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

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

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 嵌套在第 4 部分的查询中。

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

标签: mysqlsql

解决方案


推荐阅读