递归表选择查询

时间:2014-01-26 07:50:10

标签: sql sql-server tsql

我有以下两张表。基本上第一个表是递归的,即它存储父数据和子数据。第二个表与menuidpageid之间的第一个表有关系。第二个表存储第一个表的任何子行(any row having value in link field)的信息。任何人都可以帮我编写一个查询,该查询应该删除第二个表中没有数据的任何子行,包括其父表(带有红色矩形的部分标记) (第一个表)。简而言之,只有三行得到检索,即menuid = 1,3,4

enter image descri![enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

这应该有用;

;WITH MyCTE AS
(
    SELECT   T1.MenuId
            ,T1.MenuName
            ,T1.ParentId
            ,T1.Link
            ,T1.Active
    FROM Table1 T1
    WHERE EXISTS (SELECT * FROM Table2 T2 WHERE T1.MenuId = T2.PageID)
    UNION ALL
    SELECT   T1.MenuId
            ,T1.MenuName
            ,T1.ParentId
            ,T1.Link
            ,T1.Active
    FROM Table1 T1
    JOIN MyCTE  MC  ON MC.ParentId = T1.MenuId
)
SELECT DISTINCT *
FROM MyCTE;

如果您提供了DDL和DML,测试会更容易:)