Фильтрация запросов к дереву SQL - PullRequest
1 голос
/ 05 октября 2011

, если у меня есть древовидный запрос, подобный приведенному ниже, и я хочу отфильтровать имя = «Сын», а также выбрать все его родительские записи, поэтому результат должен дать первые 3 строки.Как бы я построить свой запрос?Я читал, что я должен использовать Common Table Expression (CTE), но я новичок в CTE.Может кто-нибудь мне помочь?Спасибо.

select 1 AS id, NULL AS parent, 'God' AS name
    UNION 
    select 2 AS id, 1 AS parent, 'Father' AS name
    UNION 
    select 3 AS id, 2 AS parent, 'Son' AS name
    UNION 
    select 4 AS id, NULL AS parent, 'Godmother' AS name
    UNION 
    select 5 AS id, 4 AS parent, 'Mother' AS name

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Звучит так, как будто вы можете сохранить дерево в таблице (или определить представление с помощью приведенного выше SQL), а затем, если вы используете Oracle, вы можете использовать функцию CONNECT BY для фильтрации записей.

0 голосов
/ 05 октября 2011

Это то, что вы ищете?

;with SomeCTE as
(
select *
from (
select 1 AS id, NULL AS parent, 'God' AS name     
UNION      
select 2 AS id, 1 AS parent, 'Father' AS name     
UNION      
select 3 AS id, 2 AS parent, 'Son' AS name     
UNION      
select 4 AS id, NULL AS parent, 'Godmother' AS name    
UNION      
select 5 AS id, 4 AS parent, 'Mother' AS name ) as a
)
select *
from SomeCTE a
left join SomeCTE b
on a.parent = b.id
left join SomeCTE c
on b.parent = c.id
where a.name = 'son'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...