I have a table ServiceItem that has Id, ParentId and some properties like Name, Description and so on. Max level of hierarchy is 2. I need a query that selects rows with some condition, for example Name = '123'
and its parent row to get smth like:
Id ParentId Name
1 NULL '12'
2 1 '123'
I have tried this:
SELECT
*
FROM ServiceItem si
WHERE si.Name = '123'
OR EXISTS (
SELECT
*
FROM ServiceItem syst
JOIN ServiceItem si2
ON si2.ParentId = syst.Id
WHERE syst.Id = si.ParentId
AND si2.Name = '123'
)
But it returns parent and all of it's children. Is there any chance to do it with one query? I'm using T-SQL to do it.
It's differs from this question because i need to get a bunch of rows, not only Id by path and conditions in my query could be different.
You can use a Common Table Expression with recursion:
For a more in-depth example, see this Q&A