2016-05-24 4 views
0

Wie kann ich Kreise in SQL-Tabelle finden? zum Beispiel, wenn dies ist meine Tabelle:SQL bekommen Kreise in Tabelle

From To 
    x y 
    y z 
    z x 

I x- bekommen> y-> z-> x

Iam mit SQL

+0

Mögliche Duplikat [Detecting zirkuläre Verweise in SQL] (http://stackoverflow.com/questions/7540760/detecting-circular-references-in-sql) – Stavr00

+0

Ich verstehe nicht, was ist es? Ich möchte die Abfrage als reine SQL-Abfrage – user3703910

+0

Was haben Sie versucht? Sie können nicht erwarten, dass wir Code für Sie schreiben :) –

Antwort

0

Sie einen rekursiven CTE verwenden können, um Ihre zu erhalten Muster. Probieren Sie das folgende Skript aus und passen Sie es an Ihre Bedürfnisse an.

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;