首页 > 解决方案 > T-SQL 从表中删除交叉对

问题描述

我从表中删除交叉对有问题。

示例表:

  X1     X2 
-------------
  1       2 
  2       1
  1       2 
  3       2
  2       3
  1       3

预期结果

  X1     X2 
------------
  1       2 
  1       3

目前我正在考虑遍历表行并删除参考行和重复行(如果找到),但也许我可以在一个查询中做到这一点?欢迎任何帮助。谢谢你。

标签: sqlsql-servertsql

解决方案


嗯。. . 如果我理解正确,您想枚举这些对,然后抵消反向对。这是一种方法:

with t as (
      select x1, x2, row_number() over (partition by x1, x2 order by x1) as seqnum
      from mytable t
     ) 
select t.*
from t
where not exists (select 1
                  from t t2
                  where t.x2 = t2.x1 and t.x1 = t2.x2 and t.seqnum = t2.seqnum
                 );

结果

x1  x2  seqnum
1   2   2
1   3   1

推荐阅读