Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Name varchar(16));
Заполним её данными VALUES (1, NULL, 'ALL'), (2, 1, 'SEA'), (3, 1, 'EARTH'), (4, 1, 'AIR'), (5, 2, 'SUBMARINE'), (6, 2, 'BOAT'), (7, 3, 'CAR'), (8, 3, 'TWO WHEELES'), (9, 3, 'TRUCK'), (10, 4, 'ROCKET'), (11, 4, 'PLANE'), (12, 8, 'MOTORCYCLE'), (13, 8, 'BYCYCLE'); Обычно иерархия схематизируется авто-ссылкой, которая имеет место и здесь: внешний ключ ссылается на первичный ключ той же таблицы. Имеющиеся данные можно трактовать следующим образом: ALL Построим запрос. Необходимо узнать, откуда пришел МОТОЦИКЛ (MOTORCYCLE). Другими словами, требуется найти всех предков "МОТОЦИКЛА". Начать следует со строки данных, которая содержат motorcycle:
SELECT NAME, ID_FATHER WHERE NAME = 'MOTORCYCLE'; Мы должны иметь родительский ID, чтобы перейти к следующему шагу. Второй запрос, который делает этот следующий шаг, должен быть написан подобно следующему: SELECT NAME, ID_FATHER Запросы отличаются только тем, что мы не задаем фильтр WHERE для перехода к следующему шагу. Затем мы должны объединить эти два запроса с помощью UNION ALL, что определит пошаговый метод: SELECT NAME, ID_FATHER WHERE NAME = 'MOTORCYCLE' UNION ALL
Теперь разместим все это в CTE: WITH Tree_CTE (data, id) AS (SELECT NAME, ID_FATHER FROM Tree WHERE NAME = 'MOTORCYCLE' UNION ALL ); Теперь мы вплотную подошли к рекурсии. Последний шаг должен сделать цикл, чтобы организовать выполнение пошагового метода. Это делается при использовании имени CTE в качестве таблицы внутри SQL-запроса CTE. В нашем случае мы должны соединить второй запрос CTE с самим CTE, организовав цепочку по tree_CTE.id = (второй запрос).ID. Это можно сделать следующим образом: WITH Date: 2015-09-18; view: 330; Нарушение авторских прав |