SQL查询 - 组合来自2个SELECT连接的结果,结果应该是所有不同的行

时间:2018-04-17 16:53:14

标签: sql-server

查询#1:

Select t1.*
From t1 
Join t2 on t1.c1 = t2.c1

查询#2:

Select t1.*
from t1 
join t3 on t1.c2 = t3.c2

我想结合上面2个选择查询的结果而不是任何重复。我正在做一个UNION,但它需要永远执行

2 个答案:

答案 0 :(得分:0)

select t1.*
    from t1
    where 
        exists (
            select t2.c1 
                from t2 
                where 
                  t2.c1 = t1.c1
            )
        or exists (
            select t3.c2 
                from t3 
                where 
                    t3.c2 = t1.c2
            ) 

或者,如果您需要来自t2和/或t3的值:

select t1.*
    from t1
    left outer join t2 on
        t2.c1 = t1.c1
    left outer join t3 on
        t3.c2 = t1.c2
    where 
         t2.c1 is not null
         or t3.c2 is not null

您可以尝试各自以确定您是否获得可接受的性能(我认为您不会基于您的UNION经验)。如果它很慢,你应该考虑在两个表中的c1和c2上放置一个索引,最好在t2和t3表上放置一个主键,然后在t1上的每个c1和c2上放一个非聚集索引。

答案 1 :(得分:0)

时间将取决于您环境的几个方面。

返回t1。*的另一种方法是:

select distinct t1.*
  from t1 a
  join t2 b
    on a.c1 = b.c1
  join t3 c
    on a.c2 = c.c2

Distinct将在tempdb中排序(需要时间)