1

SQL Server 2008 の 2 つの select ステートメントの間に INTERSECT 句に関する Q があります。

選択 1 a,b,c ..... INTERSECT 選択 2 a,b,c....

ここで、共通の要素を返すには、2 つのクエリのデータセットが正確に一致する必要があります。

しかし、両方の選択ステートメントの列 a のみが一致するようにします。両方のクエリの列 a の値が同じ場合、行全体が結果セットに表示されます。

私はそれを行うことができますか??

ありがとう、マーカス..

4

2 に答える 2

1

最善の方法は、クエリ自体を確認することです。彼らは交差する必要がありますか、それと結合することは可能ですか

例えば。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 に答える