我有一个关于Sql server 2008中两个select语句之间的INTERSECT子句的问号。
选择1 a,b,c ..... INTERSECT选择2 a,b,c ....
这里,两个查询的数据集应完全匹配,以返回公共元素。
但是,我只希望两个select语句的列a匹配。 如果两个查询中列a的值具有相同的值,则整个行应显示在结果集中。
我可以这样做吗?
谢谢, 马库斯..
答案 0 :(得分:1)
最好的办法是查看查询本身。他们需要一个INTERSECT,是否可以与它进行联接
例如,。 INTERSECT看起来像这样
select columnA
from tableA
INTERSECT
select columnAreference
from tableB
您的结果将包含BOTH表中的所有列..因此连接将更有用
select columnA
from tableA a
inner join tableB b
on b.columnAReference = a.columnA
如果查看执行计划,您会看到INTERSECT将执行左半连接,内连接将像预期的那样执行内连接。左半连接不是你可以告诉查询优化器要做的事情,但它更快!!!!左半连接只会从左表返回1行,其中普通连接将全部返回。在这种特殊情况下,它会更快。
因此,使用INNER JOIN构造消除INTERSECT并不是一件坏事,有时它会表现得更好。 但是,为了给您最好的答案,我需要更多关于您的查询的详细信息:)
答案 1 :(得分:0)
select * from table1 t1 inner join Table2 t2
on t1.col1=t2.col1