declare @tree table
(
id int,
ParentID int,
Name varchar(100)
);
insert @tree values
(1,null,'111'),
(2,1,'222'),
(3,1,'333'),
(4,2,'444'),
(5,2,'555'),
(6,4,'666'),
(7,4,'777');
Как ее можно фильтровать по Name чтобы если у найденной строки были родители по ParentID и он их всех вытаскивал?
Если ищу name like '%444%' то так же должны вытянуться строчки с id 1 и 2 т. к. они его родители(по parentID).
SELECT * FROM @tree AS a WHERE a.Name LIKE '%444%'
UNION
SELECT b.* FROM @tree AS a
INNER JOIN @tree AS b ON b.id = a.ParentID
WHERE a.Name LIKE '%444%'
;WITH hierarchy
(
[level], id, ParentID, Name
)
AS
(
SELECT
0, id, ParentID, Name
FROM @tree AS a
WHERE a.name LIKE '%444%'
UNION ALL
SELECT
h.[level] + 1, b.id, b.ParentID, b.Name
FROM @tree AS b
INNER JOIN hierarchy AS h ON h.ParentID = b.id
)
SELECT * FROM hierarchy;