【发布时间】:2014-09-09 01:48:13
【问题描述】:
我有一个表 1 (MID, SSN, ...) MID 是主键,表 2 (ID, SSN, StateCode..) 其中 ID 和 SSN 构成主键。我正在尝试显示表 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 值的行最终会在最终输出中重复。出了什么问题?
【问题讨论】:
-
SSN 在每个表中必须是唯一的,您的联接才能返回非重复项
-
@pixelbits 如果加入不是这样做的方法,您对另一种选择有何建议?
-
您希望在选择列表中返回什么?您的选择列表将确定查询的构造方式。它将涉及几个子选择,然后是一个连接 - 丑陋,但它会工作。
-
我试图返回表 1 中的所有列,以及表 2 中的状态码,显示 NULL 或值。 SSN是这两个表中的公共列,表1中有重复的ssn。
-
如果 table1 有 50 行并且与 table2 的左连接返回 70,则 table1 的某些行必须与 table2 中的 2 行或更多行匹配每个。因为它是产生重复的连接。查看连接条件,我只能得出结论,您误认为 SSN 在 table2 中是唯一的。但可以肯定的是,使用
SELECT COUNT(SSN), COUNT(DISTINCT SSN) FROM table2之类的东西应该很容易验证。
标签: sql duplicates left-join