私はこれを理解するのに苦労しています。
Jeff Atwood によると、SQL 結合の視覚的な説明左外部結合は、テーブル A から完全なレコード セットを生成し、一致するレコード (利用可能な場合) をテーブル B に生成します。一致するレコードがない場合、右側には null が含まれます。
左のテーブル (TableA) には重複がありません。右側の tableB には、クライアント番号ごとに 1 つまたは 2 つのエントリがあります。PrimaryTP は一方を 1 でプライマリとして指定し、もう一方は 0 を指定します。
And B.PrimaryTP = 1
TableA には重複がないため、この行を含める必要はありません。しかし、それを省略すると、クライアント番号が重複します。なんで?
これがどのように機能するかを理解するのを手伝ってもらえますか。それは私を非常に混乱させています。の論理は私をAnd B.PrimaryTP = 1
逃れます。それでもうまくいくようです。それでも、わからないと信用するのが怖いです。それを理解するのを手伝ってもらえますか。または、クエリに論理エラーが隠されていますか?
SELECT A.ClientNum --returns a list with no duplicate client numbers
FROM (...<TableA>
) as A
Left Outer Join
<TableB> as B
on A.ClientNum = B.ClientNum
--eliminate mismatch of (ClientNum <> FolderNum)
Where A.ClientNum Not In
(
Select ClientNum From <TableB>
Where ClientNum Is Not Null
And ClientNum <> IsNull(FolderNum, '')
)
--eliminate case where B.PrimaryTP <> 1
And B.PrimaryTP = 1