2016-05-24 7 views
0

Как найти круги в таблице sql? , например, если это мой стол:SQL получить круги в таблице

From To 
    x y 
    y z 
    z x 

Я хочу, чтобы получить x-> y-> z-> х

И с помощью SQL

+0

Возможный дубликат [Обнаружение циклических ссылок в SQL] (http://stackoverflow.com/questions/7540760/detecting-circular-references-in-sql) – Stavr00

+0

Я не понимаю, что это такое? , Я хочу запрос как чистый sql-запрос – user3703910

+0

Что вы попробовали? вы не можете ожидать, что мы напишем вам код :) –

ответ

0

Вы можете использовать рекурсивные CTE, чтобы получить ваш шаблон. Попробуйте сценарий ниже и настройте его в соответствии с вашими потребностями.

create table table1(
    [from] varchar(max), 
    [to] varchar(max) 
); 
insert into table1([From], [To]) 
values('x', 'y'), 
     ('y', 'z'), 
     ('z', 'x'); 

--select [From], [To] 
--from table1 

DECLARE @first_val char(1); 

--find the first value 
select top(1) @first_val = [From] 
from table1; 

--recursive cte 
;with cte([From], [To]) as (
    select [From] , [To] 
    from table1 
    where [From][email protected]_val 
    union all 
    select c.[From] +'->'+t.[From] , t.[To] 
    from cte c 
    join table1 t on t.[From] = c.[To] 
    where t.[From] != @first_val 
) 
select [From]+'->'+[To] 
from cte 
where [To][email protected]_val; 

--drop table table1; 

 Смежные вопросы

  • Нет связанных вопросов^_^