我在 Sql server 2008 中的两个选择语句之间有一个关于 INTERSECT 子句的 Q。
选择 1 a,b,c ..... 相交 选择 2 a,b,c....
在这里,两个查询的数据集应该完全匹配以返回公共元素。
但是,我只想匹配两个选择语句的 a 列。如果两个查询中 a 列的值具有相同的值,则整行应该出现在结果集中。
我可以这样做吗?怎么做?
谢谢,马库斯..
我在 Sql server 2008 中的两个选择语句之间有一个关于 INTERSECT 子句的 Q。
选择 1 a,b,c ..... 相交 选择 2 a,b,c....
在这里,两个查询的数据集应该完全匹配以返回公共元素。
但是,我只想匹配两个选择语句的 a 列。如果两个查询中 a 列的值具有相同的值,则整行应该出现在结果集中。
我可以这样做吗?怎么做?
谢谢,马库斯..
最好的办法是查看查询本身。他们是否需要一个 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 构造来消除它,有时它会表现得更好。但是,为了给您最好的答案,我需要有关您的查询的更多详细信息:)
select * from table1 t1 inner join Table2 t2
on t1.col1=t2.col1