基于特定列的“选择语句”的相交

时间:2012-08-01 13:44:07

标签: sql-server-2008-r2 intersect

我有一个关于Sql server 2008中两个select语句之间的INTERSECT子句的问号。

选择1 a,b,c ..... INTERSECT选择2 a,b,c ....

这里,两个查询的数据集应完全匹配,以返回公共元素。

但是,我只希望两个select语句的列a匹配。 如果两个查询中列a的值具有相同的值,则整个行应显示在结果集中。

我可以这样做吗?

谢谢, 马库斯..

2 个答案:

答案 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