В настоящее время я транслирую SQL-операторы SQL Server в их общий эквивалент ANSI, и я застрял с рекурсивным оператором, использующим оператор WITH.
Чтобы сконцентрироваться на проблеме, я упросту проблему следующим образом
Если у меня есть две таблицы
ReportingUnit
- col1: ключ
- col2: ParentReportingUnitKey
Facility
- col1: ключ
- col2: ParentReportingUnitKey
Эта структура описывает иерархию подотчетных единиц вплоть до учреждения, где подотчетная единица может иметь 0 .. 1 прямых родительских подотчетных единиц и 0 .. n дочерних подотчетных единиц.
Средство представляет собой «листовую» запись, которая связана с отчетной единицей.
Мне нужно создать действительный оператор SQL ANSI 92 (или в худшем случае, который будет работать в Oracle, DB2 и SQL Server), который будет возвращать все средства, связанные с данным подотчетным блоком, в любой точке иерархии.
например
Учитывая, что в таблице ReportingUnit может быть 0 .. n уровней рекурсии, как я могу вернуть все 4 средства из оператора SQL, учитывая параметр ReportingUnit = R1?