2017-08-21 153 views
1

我具有其中弧(由起始[S]和终止[E]的)的曲线图的形式存储在一个关系表如下的图形数据的图形数据循环:删除重复/从

IF OBJECT_ID('tempdb..#Test') IS NOT NULL DROP TABLE #Test; 

CREATE TABLE #Test 
(
    S NVARCHAR(1) 
    ,E NVARCHAR(1) 
); 

insert into #Test (S, E) values ('a', 'b'); 
insert into #Test (S, E) values ('b', 'a'); 
insert into #Test (S, E) values ('a', 'c'); 

所以该图由这些弧的:

a -> b 
b -> a 
a -> c 

我想删除重复/循环:一个 - > b和b - >一个=>甲 - >乙。这可能吗?

+0

你想插入后删除或只插入一个这样的对到桌上? –

+0

无论哪种方式都很好。让我们说#Test是一个临时表,非循环/重复数据写入#Test1。 – cs0815

+0

@ shA.t这不重复! – cs0815

回答

3

;with cte as (
    Select * 
      ,RN = Row_Number() over (Partition By case when S<E then S+E else E+S end order by s,e) 
    From #Test 
) 
Delete From cte Where RN>1 

更新的测试

S E 
a b 
a c 
+0

看起来很有趣... – cs0815

+0

@csetzkorn唯一的技巧是通过案例创建标准化的对。然后Row_Number()将处理重复对 –

+0

作为s和e是字符可以S cs0815

0

如果你只得到了简单的重复就像你的例子:

DELETE 
FROM #test AS t1 
WHERE EXISTS 
(SELECT * 
    FROM #test AS t2 
    WHERE t1.S = t2.E -- there's the same S/E combination, but switched 
    AND t1.E = t2.S 
    AND t1.S > t2.S -- delete only one of the combinations 
)