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


Полезное:

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


Категории:

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






Tree_CTE (data, id)





AS (SELECT NAME, ID_FATHER

FROM Tree

WHERE NAME = 'MOTORCYCLE'

UNION ALL
SELECT NAME, ID_FATHER
FROM Tree JOIN tree_CTE ON tree_CTE.id = Tree.ID

)

Результат  
data id
MOTORCYCLE  
TWO WHEELES  
EARTH  
ALL NULL

SELECT * FROM tree_CTE;

 

 

Что остановило рекурсивный процесс? Факт, что больше нет звеньев цепочки, когда достигается значение id "NULL", что в нашем примере означает случай достижения "ALL".

Отметим, что по неясным причинам MS SQL Server 2005 не допускает ключевого слова RECURSIVE после слова WITH, которое вводит CTE.

Еще одна важная вещь, связанная со структурированными в форме деревьев данными, - это визуализация данных в виде дерева..., что означает наличие отступов в иерархии при извлечении данных. Возможно ли это? Да, конечно. Это может быть сделано вычислением пути внутри рекурсии и уровня вложенности. Вот пример такого запроса:

WITH tree_CTE (data, id, level, pathstr)

AS (SELECT NAME, ID, 0, cast(' ' as varchar(MAX))

FROM Tree

WHERE ID_FATHER IS NULL

UNION ALL
SELECT NAME, Tree.ID,

tree_CTE.level+4, tree_CTE.pathstr + ' ' +Tree.NAME

FROM Tree JOIN tree_CTE ON tree_CTE.id = Tree. ID_FATHER

)

SELECT SPACE(level) + data as data, id, level, pathstr
FROM tree_CTE;

Результат  
data id level pathstr
ALL      
SEA     SEA
EARTH     EARTH
AIR     AIR
ROCKET     AIR ROCKET
PLANE     AIR PLANE
CAR     EARTH CAR
TWO WHEELES     EARTH TWO WHEELES
TRUCK     EARTH TRUCK
MOTORCYCLE     EARTH TWO WHEELES MOTORCYCLE
BYCYCLE     EARTH TWO WHEELES BYCYCLE
SUBMARINE     SEA SUBMARINE
BOAT     SEA BOAT

 

Мы использовали новый тип данных в SQL 2005, который называется VARCHAR (MAX), поскольку мы не знаем максимального количества символов, которое потребуется при конкатенации VARCHAR (16) в рекурсивном запросе, который может оказаться очень глубоким.







Date: 2015-09-18; view: 350; Нарушение авторских прав



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