Gegeben sei die folgende rekursive Abfrage:
WITH DepartmentHierarchy (DepartmentID, Name, IsInactive, IsSpecial, ParentId, HierarchyLevel) AS
(
-- Base case
SELECT
DepartmentId,
Name,
IsInactive,
IsSpecial,
ParentId,
1 as HierarchyLevel
FROM StoreDepartment
WHERE ParentId IS NULL
UNION ALL
-- Recursive step
SELECT
d.DepartmentId,
d.Name,
d.IsInactive,
d.IsSpecial,
d.ParentId,
dh.HierarchyLevel + 1 AS HierarchyLevel
FROM StoreDepartment d
INNER JOIN DepartmentHierarchy dh ON
d.ParentId = dh.DepartmentId
) SELECT * FROM DepartmentHierarchy
Ich kann Daten auswählen, die wie folgt aussehen:
DepartmentId, Name, IsInactive, IsSpecial, ParentId, HeirarchyLevel
1, Store, 0, 0, NULL, 1
2, Main Department 1, 0, 1, 2
3, Main Department 2, 0, 1, 2
4, Sub For Main 1, 0, 2, 3
Nehmen Sie außerdem an, dass eine Tabelle mit DepartmentId und ItemId existiert (z. B. DepartmentItemRelationship). Blattknoten aus der Abteilungshierarchie werden hier mit Artikeln gepaart.
Ich möchte, dass meine rekursive Abfrage nur Knoten (auf jeder Ebene) zurückgibt, die mindestens einen Blattknoten unter ihnen mit einer Übereinstimmung in der Abteilung/Artikel-Beziehungstabelle haben. Diese Knoten könnten 6 oder 7 Ebenen tiefer liegen, so dass ich nicht sicher bin, wie ich meine Abfrage ändern würde, um sicher zu sein, dass sie diese einschließt.
Danke! Kyle