Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Name varchar(16));





Заполним её данными
INSERT INTO Tree

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
|--SEA
| |--SUBMARINE
| |--BOAT
|--EARTH
| |--CAR
| |--TWO WHEELES
| | |--MOTORCYCLE
| | |--BYCYCLE
| |--TRUCK
|--AIR
|--ROCKET
|--PLANE

Построим запрос. Необходимо узнать, откуда пришел МОТОЦИКЛ (MOTORCYCLE). Другими словами, требуется найти всех предков "МОТОЦИКЛА". Начать следует со строки данных, которая содержат motorcycle:

Результат  
NAME ID_FATHER
MOTORCYCLE  

SELECT NAME, ID_FATHER
FROM Tree

WHERE NAME = 'MOTORCYCLE';

Мы должны иметь родительский ID, чтобы перейти к следующему шагу. Второй запрос, который делает этот следующий шаг, должен быть написан подобно следующему:

SELECT NAME, ID_FATHER
FROM Tree;

Запросы отличаются только тем, что мы не задаем фильтр WHERE для перехода к следующему шагу. Затем мы должны объединить эти два запроса с помощью UNION ALL, что определит пошаговый метод:

SELECT NAME, ID_FATHER
FROM Tree

WHERE NAME = 'MOTORCYCLE'

UNION ALL
SELECT NAME, ID_FATHER
FROM Tree;

 

Теперь разместим все это в CTE:

WITH

Tree_CTE (data, id)

AS (SELECT NAME, ID_FATHER

FROM Tree

WHERE NAME = 'MOTORCYCLE'

UNION ALL
SELECT NAME, ID_FATHER
FROM Tree

);

Теперь мы вплотную подошли к рекурсии. Последний шаг должен сделать цикл, чтобы организовать выполнение пошагового метода. Это делается при использовании имени CTE в качестве таблицы внутри SQL-запроса CTE. В нашем случае мы должны соединить второй запрос CTE с самим CTE, организовав цепочку по tree_CTE.id = (второй запрос).ID. Это можно сделать следующим образом:

WITH

Date: 2015-09-18; view: 299; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию