WITH mytest(ID,SerialNumber,ParentID)
AS
(
SELECT ID,SerialNumber,ParentID FROM dbo.mesMaterialUnit
WHERE ID = 5339693
UNION ALL
SELECT a.ID,a.SerialNumber,a.ParentID FROM dbo.mesMaterialUnit a
INNER JOIN mytest ON a.ParentID = mytest.ID
WHERE a.PartID = 24
)
SELECT * FROM mytest
向下递归
ID SerialNumber ParentID
5339693 0000703858600001 NULL
5339694 0000703858600001131800001 5339693
5339695 0000703858600001131800002 5339693
5339697 0000703858600001131800003 5339693
5339698 0000703858600001131800004 5339693
5341612 0000703858600001141500003 5339693
5341613 0000703858600001141500004 5339693
5347231 0000703858600001151200001 5339693
5348635 0000703858600001151400001 5339693
5349736 0000703858600001151500001 5339693
5350737 0000703858600001151700001 5339693
5351448 0000703858600001151800001 5339693
5352740 0000703858600001151900001 5339693
5352741 0000703858600001152000001 5339693
9451203 abcd 5339694
9451204 abcd 9451203
WITH test2(ID,SerialNumber,ParentID)
AS(
SELECT ID,SerialNumber,ParentID FROM dbo.mesMaterialUnit
WHERE ID = 9451204
UNION ALL
SELECT a.ID,a.SerialNumber,a.ParentID FROM dbo.mesMaterialUnit a
INNER JOIN test2 ON a.ID = test2.ParentID
WHERE a.PartID = 24
)
SELECT * FROM test2
向上递归
ID SerialNumber ParentID
9451204 abcd 9451203
9451203 abcd 5339694
5339694 0000703858600001131800001 5339693
5339693 0000703858600001 NULL