Как сделать выборку с условием для всех родительских элементов?
Мне приходят id категорий, задача - найти все эти категории, но так же необходимо учесть, что у всех родителей для данной категории стоит active = 1. Помимо parent_id есть еще path, куда складывается путь к этой категории на основе slug'ов родительских категорий (пример: /main/sub1/sub2/.../category).
Был, конечно, вариант с перебором родителей отдельно для всех id, но это слишком много запросов. К тому же это также нужно сделать и для товаров (приходят id товаров, далее нужно смотреть, что категория товара и все родительские активны), а там запросов будет еще больше.
WITH CTE_Hierarchy (id, parent_id, level, path)
AS
(SELECT id, parent_id, 1 ,cast(slug as varchar(100)) as path
FROM
categoryes
WHERE parent_id IS NULL //Если для пустых parent_id предусмотрено другое значение то поменять условие
UNION ALL
SELECT subcategory.id, subcategory.parent_id, level + 1,
case cast(path + '/' + subcategory.slug as varchar(100)) as path
FROM categoryes AS subcategory
INNER JOIN CTE_Hierarchy AS parentHierarchy ON subcategory.parent_id = parentHierarchy.id)