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