Tsql 内部将大型查询与自身连接

Tsql 内部将大型查询与自身连接,tsql,join,sql-server-2012,self-join,Tsql,Join,Sql Server 2012,Self Join,问题: 我需要从查询结果中删除重复对 与描述的问题相同 如果结果是A,B,B,A,C,A 我只对A、B和C、A感兴趣 并发症: 与链接问题不同,表中的数据不可用于执行自连接和轻松检索。它更多地处于以下状态 (SELECT C1, C2 from a mind boggling number of joins and unions) 所以我可以把它做成一个临时表,如下所示 SELECT T.C1, T.C2 ((SELECT C1, C2 from a mind boggling number

问题:

我需要从查询结果中删除重复对 与描述的问题相同

如果结果是A,B,B,A,C,A

我只对A、B和C、A感兴趣

并发症: 与链接问题不同,表中的数据不可用于执行自连接和轻松检索。它更多地处于以下状态

(SELECT C1, C2 from a mind boggling number of joins and unions)
所以我可以把它做成一个临时表,如下所示

SELECT T.C1, T.C2
((SELECT C1, C2 from a mind boggling number of joins and unions)) T1
我想执行一个内部连接来删除上面提到的重复对

那么,在这种情况下,有没有办法做到这一点 下面的查询在语法上是错误的,但希望它传达了这个想法

SELECT A.C1, A.C2
((SELECT C1, C2 from a mind boggling number of joins and unions)) T1 A
INNER JOIN T1 B
ON A.C1 = B.C1 AND
A.C2 < B.C2

我正在运行SQL Server 2012

这里有一种方法可以实现您对CTE的需求

您还可以使用临时表来存储结果,并单独使用cte1

with cte
as
( 
  select col1, col2 from --- your query here.

)
, cte1
as
(
  select col1, col2, row_number() over
       ( partition by (case when col1 >= col2 then col1
                            else col2
                            end) , 
                      (case when col1 <= col2 then col1
                            else col2
                      end) order by (select null)
       ) as rn
  from cte
  )
select * from cte1 where rn =1

在语法上,您可以使用一个通用的表表达式,但临时表可能会给您带来更好的性能。我不知道CTEs。分区也是一个漂亮的工具。我将与使用临时表进行比较,并检查性能。