Tsql 内部将大型查询与自身连接
问题: 我需要从查询结果中删除重复对 与描述的问题相同 如果结果是A,B,B,A,C,A 我只对A、B和C、A感兴趣 并发症: 与链接问题不同,表中的数据不可用于执行自连接和轻松检索。它更多地处于以下状态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
(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。分区也是一个漂亮的工具。我将与使用临时表进行比较,并检查性能。