sql - BoM 和子装配 CTE 查询
问题描述
我正在尝试使用以下信息创建 CTE 查询。我正在尝试进行 BoM 爆炸,其中列出了特定 BoM 的所有子组件。这是我的表结构。
物料清单表
BOM_ID TITLE
------ -----
1 BOM1
2 BOM2
3 BOM3
4 BOM4
5 BOM5
6 BOM6
7 BOM7
8 BOM8
9 BOM9
10 BOM10
11 BOM11
12 BOM12
子组件
SUB_ASSEMBLY_ID PARENT_BOM_ID SUB_ASSEMBLY_TITLE BOM_ID
--------------- ------------- ------------------ ------
1 1 BOM1 1
1 1 BOM2 2
2 1 BOM3 3
3 1 BOM4 4
4 2 BOM5 5
5 2 BOM6 6
6 6 BOM7 7
7 7 BOM8 8
8 1 BOM9 9
9 10 BOM10 10
10 10 BOM11 11
SUB_ASSEMBLIES 表中的 BOM_ID 是带有 SUB_ASSEMBLY_TITLE 的 BOMS 表中的 BOM_ID。SUB_ASSEMBLIES 表中的 PARENT_BOM_ID 是 BOMS 表中的直接父 BOM_ID。如果我选择 BOM1,我会尝试一直列出所有子组件,直到没有剩余子组件。通过选择 BOM1,我应该得到 BOM1、BOM2、BOM3、BOM4、BOM5、BOM6、BOM7、BOM8、BOM9。BOM10 和 BOM11 不会成为列表的一部分,因为它们或它们的任何子组件都没有以任何方式与 BOM1 关联。
我尝试了 CTE 查询的不同变体,但没有成功。这是我尝试过的最新查询。
CTE SQL 查询
WITH bom_with_subassemblies AS (
SELECT DISTINCT b.TITLE AS PARENT, s.SUB_ASSEMBLY_TITLE AS CHILD, s.PARENT_BOM_ID
FROM BOMS b INNER JOIN SUB_ASSEMBLIES s ON b.BOM_ID = s.BOM_ID
WHERE b.BOM_ID = 1
UNION ALL
SELECT bwr.PARENT, bwr.CHILD, bwr.PARENT_BOM_ID
FROM bom_with_subassemblies bwr, BOMS b
WHERE bwr.PARENT_BOM_ID = b.BOM_ID
)
SELECT * FROM bom_with_subassemblies
当我执行上面的查询时,我收到一个The maximum recursion 100 has been exhausted before statement completion错误。
可以修改查询以获取所需信息吗?还是我必须修改我的表结构以适应这样的 CTE 查询?
解决方案
推荐阅读
- docker - 竹码头建设失败?
- c# - 使用不同用户创建进程时,进程需要提升
- pine-script - 买/卖订单的执行订单
- ios - 有时 FCM 通知没有收到,有时会延迟 iOS (Swift)
- python - AttributeError:“ReturnList”对象没有属性“status_code”
- python - Tensorflow - 更改辍学值对网络没有影响
- c# - 忽略 API 控制器中的异常,以便控制器仍然处理请求
- c++ - 使用 Vivek 的 Vcam / Capture Source Filtet 构建/链接错误
- php - 如何在不更改 url 的情况下将 404page 重定向到 https 中的主页
- php - PHP 对成员函数的引用