首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL A不是左加入B吗,只是A?

SQL A不是左加入B吗,只是A?
EN

Stack Overflow用户
提问于 2018-12-27 18:16:36
回答 5查看 92.5K关注 0票数 40

所以我看了几个图表来理解连接之间的区别,然后我看到了这样的图像:

也许问题在于用Venn图来表示这一点。但是看看第一个连接,左上角,这不是只是A吗?B在那里有什么区别?

编辑:https://blog.jooq.org/2016/07/05/say-no-to-venn-diagrams-when-explaining-joins/

这个网站解释得很好

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-12-27 18:27:08

不,因为它是一个联接,它可以为A中的行生成大于1的基数,也就是说,如果B中有多个匹配行,那么A中的一行将多次显示。

示例:

表A:

代码语言:javascript
运行
复制
id name
-- -------
 1 Alice
 2 Malcolm
 3 Kelly

表B:

代码语言:javascript
运行
复制
id_a preferred_food
---- --------------
   1 Pizza
   2 Burger
   2 Steak
   2 Menestroni

然后"A左加入B“就会给你:

代码语言:javascript
运行
复制
id name    id_a preferred_food
-- ------- ---- --------------
 1 Alice      1 Pizza
 2 Malcolm    2 Burger
 2 Malcolm    2 Steak
 2 Malcolm    2 Menestroni
 3 Kelly   null null

简言之:

  • A中的所有行都显示在左侧联接中:就连3 Kelly也会出现。
  • 当B中没有匹配的行时,来自B的列将显示为空:行3 Kelly在最后两列中有null
  • A中的行在B中有多个匹配项时可能会多次显示:行2 Malcolm显示三次。
票数 36
EN

Stack Overflow用户

发布于 2018-12-27 18:42:23

您的图表并不完全是Venn图。

两个圆圈的交集用表A和表B的数据表示已连接的行(根据您的联接条件)。

左新月(标记为" A ")表示表A中没有相应行的行;右新月(标记为"B")表示表B中没有对应行的行。

左上角图应该显示的是,左联接提供了表A和表B中的数据,这些数据可以根据连接条件进行连接,以及表A中没有相应匹配的所有行。

票数 3
EN

Stack Overflow用户

发布于 2018-12-27 18:20:38

通过联接,您可以从两个表中获得字段,而不仅仅是A。如果表之间的关系不是1-1,则返回的记录数也会乘以。

基本上,所有这些连接之间唯一的区别是A中的记录与B中的任何记录不匹配时的行为,反之亦然。你的图表只显示了这种行为。

图顶部let =保存来自A的所有记录,无论它们是否与B中的任何内容匹配(+未表示的内容:当它们匹配时,从B获取数据)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53949197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档