Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL在数据库树结构表中查找根_Sql_Sql Server_Sql Server 2008_Hierarchy - Fatal编程技术网

使用SQL在数据库树结构表中查找根

使用SQL在数据库树结构表中查找根,sql,sql-server,sql-server-2008,hierarchy,Sql,Sql Server,Sql Server 2008,Hierarchy,下面的DB表描述了物料清单(BOM),基本上是一个树状结构: Part(PartId, ParentId, PartName) ParentId为0的零件是成品,这意味着它们不构成任何其他产品 现在给出一个PartId,我想通过使用纯SQL(MS SQL Server)或LINQ lambda知道它属于哪些产品,请尝试以下操作: ;WITH CTE AS ( SELECT PartId, ParentId FROM Part WHERE PartId = @PartId

下面的DB表描述了物料清单(BOM),基本上是一个树状结构:

Part(PartId, ParentId, PartName)
ParentId为0的零件是成品,这意味着它们不构成任何其他产品

现在给出一个PartId,我想通过使用纯SQL(MS SQL Server)或LINQ lambda知道它属于哪些产品,请尝试以下操作:

;WITH CTE AS
(
    SELECT PartId, ParentId
    FROM Part
    WHERE PartId = @PartId
    UNION ALL
    SELECT B.PartId, B.ParentId
    FROM CTE A
    INNER JOIN #Part B
    ON A.ParentId = B.PartId
)
SELECT DISTINCT PartId 
FROM CTE
WHERE ParentId = 0

发布产品表结构..哪个数据库?甲骨文已连接BY@JustinKirk没有产品表,parentId=0的零件是产品使用普通SQL很难做到这一点。您将需要使用递归或迭代-我将尝试迭代。。。