查询#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,但它需要永远执行
答案 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中排序(需要时间)