我很难弄清楚这一点。
根据 Jeff Atwood A Visual Explanation of SQL Joins左外连接从表 A 中产生一组完整的记录,在表 B 中具有匹配的记录(如果可用)。如果没有匹配,右侧将包含 null。
左表 (TableA) 没有重复项。右表 B 有每个客户编号的 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