gpt4 book ai didi

sql - 左外连接查询在 SQL Server 中返回重复项

转载 作者:行者123 更新时间:2023-12-04 02:23:54 25 4
gpt4 key购买 nike

我有一个表 1 (MID, SSN, ...) MID 是主键,表 2 (ID, SSN, StateCode..) 其中 IDSSN 构成主键。我正在尝试显示表 1 中的所有列以及表 2 中的 StateCode 并将其与 SSN 相匹配。 Tbl 1 有 50 行,有些具有相同的 SSN 值。

如果从表 2 中没有找到 SSN 匹配项,则在 StateCode 中显示 NULL 是可以接受的,因此我选择了左连接。这是我的查询

Select 
tbl1.*, tbl2.StateCode
from
tbl1
left outer join
tbl2 on tbl1.SSN = tbl2.SSN

我想检索 50 条记录,但我得到了 70 条记录,在 tbl1 中包含相同 ssn 值的行最终在最终输出中重复。出了什么问题?

最佳答案

我建议阅读 cartesian product .

如果您在第一个表中有 50 行,在第二个表中有 70 行,那么就有 3500 行。连接条件 tbl1.SSN = tbl2.SSN 将过滤掉行,但您最终可能会得到超过 50 行。

回到您的问题,您可以通过尝试以下操作来了解发生了什么:

SELECT 
tbl1.*,
(SELECT COUNT(*) FROM tbl2 WHERE tbl1.SSN = tbl2.SSN) AS NbResultTbl2
FROM
tbl1

这将告诉 tbl1 的哪些行在 tbl2 中有多个匹配项。如果 NbResultTbl2 列中的数字大于 1,那么您将以重复项结束。

要消除这些重复项,您可以尝试这样做:

SELECT 
tbl1.*,
(SELECT TOP 1 StateCode FROM tbl2 WHERE tbl1.SSN = tbl2.SSN)
FROM
tbl1

这将获取第一个 StateCode,用于在 tbl2 中找到匹配的 SNN。

关于sql - 左外连接查询在 SQL Server 中返回重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24816252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com