【问题标题】:Bill of Materials Query物料清单查询
【发布时间】:2012-03-29 12:47:12
【问题描述】:

我的数据库中目前有 2 个表,如下所示:

Table: SampleProducts   
SampleProductsId (PK)   Name
1                             A
2                             B
3                             C
4                             D
5                             E
6                             F
7                             G

Table: SampleProductsBoms           
SampleProductsBomId (PK)    ParentId (FK)   ChildId (FK)    Quantity
1                              1             2             3
2                              2             3             4
3                              4             6             2

ParentId 和 ChildId 都引用 SampleProductsId

用英文,所以我可以确保我们都在同一个页面上: 产品 A 由 3 个 B 组成 产品 B 由 4 个 C 组成 产品D由2个F组成

我想创建一个存储过程/LinQ 语句或我可以在我的 MVC 3 c# Web 应用程序中使用的东西,它将为我提供以下表结构/对象来使用...

例子:

Recursive Query to find the components of B
ProductId Name Quantity
   3        C     4
   6        F     2

这可能会很深,所以我真的需要递归!

【问题讨论】:

  • 不,我没有。我来自 PHP 背景。我可以相对容易地在 PHP/mySQL 中做到这一点。这是我不习惯的 Microsoft 技术... SQL server 语法、LinQ 语法、C# 语法和现在的 CTE 语法以及学习 Visual Studio 的做事方式... 是否创建 viewModel 来放置查询或是否会更好/更快地创建一个存储过程...我现在很头疼...如果您可以为我提供一个简单的存储过程或可以拉出该表的东西,我们将不胜感激。谢谢
  • 请不要在您的标题中添加“-Sql Server 2008 VS2010 MVC 3 C#”之类的内容。这就是标签的用途。

标签: asp.net sql recursion


【解决方案1】:

CTE 有助于根据问题陈述中的要求进行递归检查链接

Common Table Expression

或者我认为以下查询也可以解决您的目的

select components.SampleProductId as productid,components.Name as Name,Quantity
from SampleProductsBOM bom
inner join SampleProducts products
on products.ParentId=bom.ParentId
inner join SampleProducts components
on components.SampleProductId=bom.ChildId
where products.Name='B'

【讨论】:

  • 谢谢,但在您的链接中,他们的示例包含连接。这使得理解正在发生的事情变得非常混乱......我比我开始的地方更迷茫。
  • 令人困惑的是,您可以在 linq 中执行查询,也可以使用 EF 创建过程和映射。如果您的嵌套很深,您必须选择要执行此任务的位置,我认为您应该更喜欢过程而不是 linq。它将提供灵活性。
  • 谢谢,会试一试,告诉你进展如何。
  • 我刚刚查看了您上面的查询...它不是递归的!我将再看一下 Common table Expressions 来尝试理解它。
  • @Gravy 我的查询不是递归的,但我说没有递归你可以做到这一点
猜你喜欢
  • 2013-08-27
  • 2014-04-14
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 2010-10-12
相关资源
最近更新 更多