WITH RECURSIVE PEDIGREE ( CODE_HORSE, CODE_FATHER, CODE_MOTHER, NAME, MARK, DEPTH) AS (SELECT HORSE.CODE_HORSE, HORSE.CODE_FATHER, HORSE.CODE_MOTHER, HORSE.NAME, CAST('' AS VARCHAR(80)), 0 FROM HORSE WHERE HORSE.CODE_HORSE = :CODE_HORSE UNION ALL SELECT HORSE.CODE_HORSE, HORSE.CODE_FATHER, HORSE.CODE_MOTHER, HORSE.NAME, 'F' || PEDIGREE.MARK, PEDIGREE.DEPTH + 1 FROM HORSE JOIN PEDIGREE ON HORSE.CODE_HORSE = PEDIGREE.CODE_FATHER WHERE –- ограничение глубины рекурсии PEDIGREE.DEPTH < :MAX_DEPTH UNION ALL SELECT HORSE.CODE_HORSE, HORSE.CODE_FATHER, HORSE.CODE_MOTHER, HORSE.NAME, 'M' || PEDIGREE.MARK, PEDIGREE.DEPTH + 1 FROM HORSE JOIN PEDIGREE ON HORSE.CODE_HORSE = PEDIGREE.CODE_MOTHER WHERE –- ограничение глубины рекурсии PEDIGREE.DEPTH < :MAX_DEPTH ) SELECT CODE_HORSE, NAME, MARK, DEPTH FROM PEDIGREEРекурсивный запрос для FireBird.
Оставляю на память, потому как иногда нужен.
Комментариев нет:
Отправить комментарий