2014-01-26 123 views
0

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

enter image descri![enter image description here

enter image description here

回答

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,那么测试起来要容易得多:)