【发布时间】:2019-11-05 19:01:12
【问题描述】:
我有两张桌子。当我在一个键匹配而另一个键不匹配的表上使用左连接加入它们时,我仍然收到左连接,但在两者不匹配的地方我收到重复。
data Onl;
input an ssn;
datalines;
1 1
2 1
3 1
4 2
5 2
6 2
10 6
11 7
12 8
;
run;
data Off;
input an ssn;
datalines;
1 1
2 1
4 2
5 2
7 3
8 4
9 5
;
run;
proc sql;
create table test as
select
Onl.*
from
Onl
left join Off
on Onl.ssn = Off.ssn
and Onl.an ne Off.an
;
quit;
ne 条件的 SQL 行为是什么?我希望决赛桌由var ssn 组成,其中var an 不匹配。
预期输出的一个例子是:
an ssn
3 1
6 2
10 6
11 7
12 8
【问题讨论】:
-
“重复”是什么意思。如果 RIGHT 表中的三个观察值与 LEFT 中的观察值匹配,则该观察值将出现 3 次。如果您只是从 LEFT 表中提取变量,则 DISTINCT 关键字将消除重复项,包括消除原始 LEFT 表中的任何重复项。
-
如果我在 SAS 中加入,我会收到两行值
3,1和两行值6,2。当表Onl最初只有 1 行而表Off根本不包含这些值时,为什么会有两行具有这些值?我知道解决方法。我从来没有使用过ne的连接,我对结果很好奇 -
我不知道你为什么说这些价值观不存在。前两行的 SSN=1 且 AN 的值都不是 3。所以这正是你所要求的。
-
了解 LEFT JOIN ON 返回的内容:INNER JOIN ON 行 UNION ALL 不匹配的左表行,由 NULL 扩展。作为 OUTER JOIN 的一部分,始终知道您想要什么 INNER JOIN。 left join 的工作原理是一个常见问题。在考虑发布之前,请始终使用谷歌搜索您的错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有或没有您的特定字符串/名称和站点:stackoverflow.com 和标签,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。 PS 请通过编辑而不是 cmets 澄清。
-
请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不可以。 (调试基础。)对于包含 DBMS/产品和 DDL 的 SQL,其中包括约束和索引以及表格格式的初始化。 PS如果你想知道你的期望出了什么问题,你需要给他们。