【问题标题】:Conceptual question: Does left join with not null filter on the joining key always equal to inner join?概念问题:连接键上的非空过滤器左连接是否总是等于内连接?
【发布时间】:2020-03-19 01:30:47
【问题描述】:

这是一个概念问题。所以我没有任何实际的代码。但这很简单。

让我们有两个表(Join_1 和 Join_2)来自连接 A 和 B:

加入_1:

Select *
From A join B on A.id = B.id

加入_2

Select *
From A left join B on A.id = B.id
where B.id is not null

问题:Join_1 是否总是等于 Join_2?您可以考虑任何条件,例如空值、重复等。

【问题讨论】:

  • 这不是“概念”。左连接是 2 个表和一个条件的函数。在权威参考文献中找到定义并应用它。请在考虑询问并展示您的结果之前进行研究。这是一个很容易找到的 SO 常见问题解答。尽管大多数答案都非常糟糕。左连接返回行上的内连接联合所有由空值扩展的不匹配的左表行。

标签: sql join left-join inner-join


【解决方案1】:

出于所有实际目的,“是”。

唯一的例外是a.id 可能是NULL。在这种情况下,第一个版本将过滤掉这些行。第二个将包括它们。

【讨论】:

  • 那么在任何情况下,Join_1 可以比 Join 2 拥有更多的行吗?
  • Gordon,即使 a.id 为 NULL,'B.id is not null' 不会过滤掉结果集中的所有行吗?
  • 过滤器在 B.id 上。我认为它不会删除 a.id 上的空条目。
猜你喜欢
  • 2011-09-25
  • 1970-01-01
  • 2013-01-30
  • 2020-12-13
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多