当前位置: 首页 > 面试题库 >

物料清单的递归查询

伍玮
2023-03-14
问题内容

我最近才刚刚开始自学SQL,并且能够将各种教程中所需的几乎所有内容组合在一起,但这使我无法自拔。我们有一个表格,其中包含我们产品的所有物料清单信息。我只需要其中的4列-PPN_I,CPN_I,QUANTITY_I,BOMNAME_I-
分别是项目编号,原材料编号,数量和BOMName。许多BOM都包含子装配体。我需要一个结果集,其中列出了BOM表的所有组件,无论级别如何。我很确定我需要使用递归查询,但不能完全得到它,任何帮助将不胜感激。我知道还有其他一些BOM表问题,但是它们似乎都具有不同的表结构。所以
-

首先,我只是想获取一个特定项目的结果,以方便我的猜测和检查工作。完成后,我将需要所有项目或至少项目列表的报告。其中许多项目都是可配置的,并且具有多个BOM。要获得默认设置,我正在寻找一个空白的BOM名称。

我可以运行它并获得第一个级别:

    select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 1 as BOMLevel
    from BM010115 bm
    where bm.PPN_I like '0123105-HWT' and bm.BOMNAME_I like ''

问题在于,其中一个(或多个)行将具有cpn_i值,该值是一个子程序集。要查看由子组件构成的内容,我需要将第一个查询的每个结果放回同一查询中。

    select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 2 as BOMLevel
    from BM010115 bm
    where bm.PPN_I like 'ZC-BASESUBLIM' and bm.BOMNAME_I like ''

显然,这不是最有效的方法。我已经尝试过,但是我似乎无法正确获得结果。我经历了很多不同的版本,这是我最近做过的/最接近的事情。

    With BMStudy as
    (select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 1 as BOMLevel
    from BM010115 bm
    where bm.PPN_I like '0123105-HWT' and bm.BOMNAME_I like ''

    UNION ALL

    select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, 2 as BOMLevel
    from BM010115 bb, BMStudy ba
    where bb.BOMNAME_I like '' and ba.PPN_I = bb.CPN_I)
    select * from BMStudy

这仅返回第一级结果。我不认为任何BOM的深度都超过3个级别,但是我想有一列来指示它是哪个级别。有人可以向我指出正确的方向,也可以给我一些有关我做错了什么的指示吗?

TL; DR-需要查询,可提取BOM表中的所有组件,然后为第一个查询的所有结果提取BOM表组件,并将其添加到结果集中。

谢谢


问题答案:

戈登,我对您的帮助深表谢意。您帮助了我一些基本的缺陷,并且完成了一些调整,并且在大多数情况下满足了我的需求……至少到目前为止。这已经让我发疯了很长一段时间。我确定的代码在下面,以防将来对其他人有所帮助

  With BMStudy as (
  select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 1 as BOMLevel
  from BM010115 bm
  where bm.PPN_I like '0123105-HWT' and bm.BOMNAME_I like ''
  UNION ALL
  select ba.ppn_i, bb.cpn_i, bb.bomname_i, bb.quantity_i, 
  (BOMLevel + 1) as BOMLevel
  from BMStudy ba join
       BM010115 bb
       on ba.cpn_i = bb.ppn_i
  where bb.BOMNAME_I like ''
 )

 select top 1000 BMStudy.*, i.ITEMDESC from BMStudy, iv00101 i
 where CPN_I = itemnmbr
 order by BOMLEVEL, CPN_I ASC
 OPTION (MAXRECURSION 0)

再次感谢!



 类似资料:
  • 问题内容: 我不明白bom对象的目的是什么?并且我正在使用Spring 3.2.8版本以及JBoss服务器,那么我需要使用哪个bom依赖关系?当我在pom.xml中提到以下依赖项时: jar文件是否已下载到我的Maven依赖关系中? 问题答案: Bom对象的目的是什么? Maven父子关系对于在单个位置管理多个项目的依赖关系非常方便。但是,Maven项目只能有一个(直接)父级。因此引入了用于依赖性

  • 问题内容: 我目前在理解和编写递归查询时遇到一些麻烦。我知道递归查询用于搜索信息层次结构,但是我还没有找到一个可以遍历层次结构的简单在线解决方案。例如,假设我有一个对家谱建模的关系: 如果我想编写一个遍历此家谱的递归查询,收集所有父母直到出生,我该如何处理? 提前致谢。 问题答案: 您可以使用子句。 在您的情况下,SQL可能类似于:

  • 问题内容: 我有一个包含文章和版块的网站,每个版块都可以有一个父版块,例如: 等等.. 现在,我想递归地获取它们,最有效的方法是通过php和mysql吗? 先进的Tnx。 问题答案: 如果树不是太大,则可以使用一些聪明的引用在PHP中构建树。 这将为您提供带有相应-slot 子级的树结构。 我们已经用相当大的树(> 1000项)完成了此操作,它非常稳定并且比在MySQL中进行递归查询要快得多。

  • 所以这段时间我一直认为递归的问题是理解案例。事实证明,我的问题是理解递归案例的值。例如,向后打印数组的一部分。 原始尝试 一次有效的尝试 然而,这是一种高效的递归吗?还是有更好的办法?这是我从写出来的时候看出来的唯一方法。

  • 问题内容: (希望)对某些人来说,这是一个非常简单的问题。 我有一个来自mySQL数据库的递归菜单,现在我的主要问题是: 创建URL的最佳方法是什么?我希望输入每行的标题,例如/ eggs / milk / bacon /。鸡蛋处于0级,例如:鸡蛋0,牛奶1,培根2。关于如何动态输出此内容的任何想法? 对于“ cletus”所说的这个问题,我几乎要去做些评论:PHP / MySQL- 建立导航菜单

  • 问题内容: 我有一组按层次结构组织的数据,应该可以增长到任意大小。我需要检索整个树,但是我无法弄清楚如何仅使用SQL来完成。我当前的解决方案是创建一个临时表,并使用递归函数依次查询树的分支,然后将结果存储在临时表中,随后我再次对其进行查询以产生所需的结果。 我的问题是,从本质上讲,我正在执行的联接正确吗?构造一个中间表,然后查询结果。似乎应该有一种使用联接的方法,但是MySQL文档仅涵盖检索有限深