C# 如何使用存储过程创建主子递归结构
我有三个相关的五个表,分别是父表和子表,另一个表存储子表中项目的信息 这是我的桌子: 父表C# 如何使用存储过程创建主子递归结构,c#,sql,sql-server,C#,Sql,Sql Server,我有三个相关的五个表,分别是父表和子表,另一个表存储子表中项目的信息 这是我的桌子: 父表 Parent Item ID PARENT Description width Parent item Thickness 500200 500200 Description 15 20 500201 500201 Description1 5 2
Parent Item ID PARENT Description width Parent item Thickness
500200 500200 Description 15 20
500201 500201 Description1 5 2
500202 500202 Description2 1.5 16
500203 500203 Description3 15 20
子表
Parent Item ID Item ID Quantity
500200 100200 1
500200 400200 1
500200 300200 1
300200 100200 1
子项详细信息表如下所示
表中存储的项目=100200在表X中,项目=400200在表Y中,项目=300200
表十
Item ID DECRIPTION THICKNESS DIAMETER WIDTH
100200 100200DESC 0.15 1.5 5
表Y
Item ID DECRIPTION NAME SIZE
400200 400200DESC XYZ 4X6
表z
Item ID DECRIPTION NAME SIZE offset
300200 300200DESC XYZ 3X9 0.375
我试图完成的是使用C创建物料清单结构或父到子递归结构
我想创建一个SQL Server视图或存储过程,如下所示
我希望看到这样的情况:父表、子表中的所有列,以及基于父子关系的表X、Y、Z中的一些列
parent ID PARENT Description Parent Thickness Item ID Quantity child DECRIPTION THICKNESS offset SIZE
500200 500200 Description 20 100200 1 100200DESC 0.15
500200 500200 Description 20 400200 1 400200DESC 4X6
500200 500200 Description 20 300200 1 300200DESC 0.375
300200 300200 Description 20 100200 1 100200DESC 0.15 3X9
如果要为单个项目查找多行,请使用不同的值查找每行。你可以试试:
SELECT
childTable.ParentItemID,
parentTable.ParentDescription,
childTable.ItemID,
childTable.Quantity,
fields.Description,
fields.Name,
fields.Value
FROM childTable
LEFT JOIN parentTable ON childTable.ParentItemID = parentTable.ParentItemID
LEFT JOIN (
SELECT ItemID, Description, "THICKNESS" AS Name, THICKNESS AS Value FROM TableX
UNION ALL
SELECT ItemID, Description, "SIZE", SIZE FROM TableY
UNION ALL
SELECT ItemID, Description, "offset", offset FROM TableZ
UNION ALL
SELECT ItemID, Description, "DIAMETER", DIAMETER FROM TableX
UNION ALL
SELECT ItemID, Description, "WIDTH", WIDTH FROM TableX
) AS fields ON fields.ItemID = childTable.ItemID
ORDER BY childTable.ParentItemID, childTable.ItemID, fields.Name
通过调整联合选择,可以通过增加列数和减少行数来改变这一点
当然,当我处理绑定到基本表的动态额外值时,我通常只创建一个细节表,如下所示:
DetailTable:
ItemID
DetailTypeID
DetailValue
当然,如果您确实希望将一组详细信息作为一行中的列,那么这样做可能需要一些努力 这似乎是一个非常基本的选择,从父表或子表中选择,并与所有其他表进行左连接。。。通常情况下,项将是主表,因为某些项可能没有父项,但任何父项都应至少有一个子项,否则它不是父项。通常,parentID是指向同一表中另一个itemID的指针。此外,如果可能的话,在SQL之外创建树本身的方法通常是正确的。@ebyrobmy的主要问题是根据子表项Id字段从表X、Y、Z获取信息,并将这些信息与父表信息一起显示。我可以让树工作我已经有了父子关系。获取X,Y,Z中的字段是我的挑战