2016-03-30 12 views

答えて

3

、検索が内部結合と同等の、しかし

select 
    CustomerName = (select 
         Customer.Name 
        from 
         Customers 
        where 
         Orders.CustomerId = Customer.Id), 
    Orders.OrderDate 
from 
    Orders 

Aの同等のようには見えません参加は、2つのテーブルを取り、いくつかの節に基づいて、両方のテーブルの行と一致します。結合のタイプは、どちらの側でも一致しない行をどうするかを規定しています。

ルックアップと上記のSQLは、少なくとも概念的には1つのテーブルでループし、他のテーブルで一致する行を各行ごとに見つけようとします。不一致の行が結果に残るため、結果は内部結合よりも左結合によく似ています。ただし、Lookupでは右側の行が1つ見つかると予想され、結合は結果セットを右側の一致するすべての行に展開するため、違いがあります。したがって、検索は通常、注文の上から顧客のように、関係の多くの側から一方の側にルックアップするために使用されます。また、結合されたテーブルが集計に参加します。

複数の値を検索するLookupSet functionがありますが、結合とは異なり、結果セットは展開されませんが、行内に「ネスト」される値の配列が戻されます。

要約すると、ルックアップは内部結合の同等物ではなく、他のどのタイプの結合に対してもSSRSには等価物は存在しません。

これは、SQLデータソースであると仮定すると、通常、レポートのデータソースで結合を実行します。

+0

多くのありがとう@ r-schreurs –

3

R. Schreursの説明は正しいですし、lookup関数は左結合と同じように機能しますが、データソースの編集はオプションではない場合に使用できる回避策があります。

は右に参加シミュレートするために、ほとんどの場合、最も簡単な方法は、つまり、あなたのテーブルのデータ・セットとDATASET1からLookup値としてDATASET2を使用し、データセットを逆にすることです。

内部結合をシミュレートするには、lookupを使用して、表示するデータの行を制御できます。行の可視性プロパティで式を使用して、IDが両方のデータセット内に存在しない行を非表示にすることができます:完全外部に参加するように動作しますテーブルについて

=IIF(IsNothing(Lookup(Fields!ID_1.Value, Fields!ID_2.Value, Fields!ID_2.Value, "DataSet2")), True, False) 

を、私は認識していませんよ第3のデータセットを使用せずに動作するソリューションDataSet0にDataSet1とDataSet2のすべてのIDがある場合は、他のデータセットの値にlookupの値を使用できます。上記と同様の式を使用して、DataSet1またはDataSet2にIDが見つからない行を非表示にすることができます。

+0

多くのおかげで@ pete-rennard-cumming –

関連する問題