当前位置: 首页 > 面试题库 >

LEFT OUTER JOIN(产生额外的行)问题

戴正阳
2023-03-14
问题内容

我有两个表,我想使用左外部联接将它们联接在一起。但是,即使我的左表仅包含唯一值,右表也可以多次满足CONDITION,因此会向结果集添加额外的行。

复制问题的代码:

declare @tb1 table (c1 int)
declare @tb2 table (c2 int)

INSERT INTO @tb1 VALUES (1)
INSERT INTO @tb1 VALUES (2)
INSERT INTO @tb1 VALUES (3)
INSERT INTO @tb1 VALUES (4)

INSERT INTO @tb2 VALUES (3)
INSERT INTO @tb2 VALUES (4)
INSERT INTO @tb2 VALUES (5)
INSERT INTO @tb2 VALUES (6)

select * from @tb1 left outer join @tb2 ON c1 = c2

INSERT INTO @tb2 VALUES (3)
INSERT INTO @tb2 VALUES (4)
INSERT INTO @tb2 VALUES (5)
INSERT INTO @tb2 VALUES (6)

select * from @tb1 left outer join @tb2 ON c1 = c2

如您所见,尽管左表保持不变,但第一个SELECT返回4行,第二个SELECT 6html" target="_blank">返回。

一个人如何严格遵守左表,而仅使用右表来补全左表中的行?

帮助!

RESULTS:
c1          c2
----------- -----------
1           NULL
2           NULL
3           3
4           4

[DUPLICATE @tb2 records]

c1          c2
----------- -----------
1           NULL
2           NULL
3           3
3           3
4           4
4           4

问题答案:

抱歉,您的想法歪了。

这样考虑:如果您只希望tb1中的每一行都来自tb2中的一行,那么服务器应该选择哪一行?事实是,根据联接的定义,右侧表中与左侧行匹配的每一行都是匹配项,必须包含在内。

在连接之前,您必须确保tbl2对于c2具有不同的值。只要您的SQL变体支持DISTINCT [column](并非全部),Murph的建议就可以做到。



 类似资料:
  • 我是一个相对新手流用户,我觉得应该有一个更干净的方式来完成我下面的内容。是否有可能在一个流中完成下面的代码所做的一切(消除底部的if/else)? 谢谢

  • 已经提出了与此相关的问题。我什么都试过了,但没能解决我的问题。我挣扎了2个小时,现在我在这里发布这个。 问题:UIScrollView的顶级contentInset总是有20像素的额外空间。 我有视图控制器XIB,而不是故事板。 首先,stackoverflow上的相关问题及其解决方案假设UIScrollView是UIViewController的根视图。但是我的滚动视图不是根视图,因此可能 se

  • Marcin Grzejszczak谈论Spring Cloud Sleuth和Zipkin 点击此处查看视频

  • 数据库 默认情况下,Tendermint使用 syndtr/goleveldb 包作为其进程内键值数据库。不幸的是,LevelDB 的这个实现似乎在重载下受到了影响(参见#226)。最好安装 LevelDB 的真正 c 实现,并使用 make build_c 编译 Tendermint。有关详细信息,请参阅安装说明。 Tendermint 在 $TMROOT/data 中保存多个不同级别的 db

  • 这些模块是当前ansible附带的,但是也可能在以后被分开.额外模块主要被社区人员维护.非核心模块仍然是完全可用的,但是在发出和拉取请求时可能收到稍微低的响应速率 受欢迎的的 “extras” 模块将来可能会提升为核心模块 这些额外的模块托管在Github上的,`ansible-modules-extras <http://github.com/ansible/ansible-modules-ex

  • 我有一张垂直卷轴的桌子。我保留一些行折叠并由一些脚本管理。 为了允许额外的内容,我使用了和,但是由于隐藏的内容,这会在表的最后一行之后创建一个空格。表的大小是正确的,但即使没有溢出,也会显示一个滚动条(滚动空格)。 我在Chrome和Firefox中看到了这一点。 有什么想法让那些行真正隐形吗?