1

我在 Sql server 2008 中的两个选择语句之间有一个关于 INTERSECT 子句的 Q。

选择 1 a,b,c ..... 相交 选择 2 a,b,c....

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

但是,我只想匹配两个选择语句的 a 列。如果两个查询中 a 列的值具有相同的值,则整行应该出现在结果集中。

我可以这样做吗?怎么做?

谢谢,马库斯..

4

2 回答 2

1

最好的办法是查看查询本身。他们是否需要一个 INTERSECT,是否可以与它进行连接

例如。INTERSECT 看起来像这样

select columnA
from   tableA
INTERSECT
select columnAreference
from   tableB

您的结果将包含两个表中的所有列..所以连接会更有用

select columnA
from   tableA a
       inner join tableB b
         on  b.columnAReference = a.columnA

如果您查看执行计划,您会发现 INTERSECT 将执行左半连接,而内连接将执行与预期一样的内连接。左半连接不是您可以告诉查询优化器执行的操作,但它更快!!!!左半连接只会从左表返回 1 行,而普通连接将全部返回。在这种特殊情况下,它会更快。

所以 INTERSECT 并不是一件坏事,应该用 INNER JOIN 构造来消除它,有时它会表现得更好。但是,为了给您最好的答案,我需要有关您的查询的更多详细信息:)

于 2012-08-02T07:32:46.657 回答
0
select * from table1 t1 inner join Table2 t2
on t1.col1=t2.col1
于 2012-08-01T15:13:18.527 回答