首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到左连接表的SQL内连接

问到左连接表的SQL内连接
EN

Stack Overflow用户
提问于 2015-02-19 01:38:52
回答 3查看 14.6K关注 0票数 8

因此,这可能更多地是一个关于MySQL中的joins如何工作的理论问题,但我希望得到一些指导。

假设我有三个表,表a、b和c,其中表a和b是事实表,表c是表b的维度表。如果我想要将表b左连接到表a (我想保留表a的所有内容,但也想要匹配表b中的内容),即使表b被左连接,我仍然可以将表c内连接到表b吗?或者我必须将表c连接到表b?或者,这两种方法在所有意图和目的上都会产生相同的结果吗?

代码语言:javascript
复制
select a.column, c.name
from tablea a
left join tableb b on a.id = b.id
inner join (?) tablec c on b.name_id = c.name
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-19 02:21:41

MySQL支持的语法允许您实现您想要的功能:

代码语言:javascript
复制
select a.column, c.name
from
  tablea a
  left join
    tableb b
    inner join tablec c on b.name_id = c.name
   on a.id = b.id
;

在这种情况下,表tableb和tablec首先被联接,然后它们的联接结果被外联接到tablea。

但是,最终的结果集将与@simon at rcl's solution相同。

票数 30
EN

Stack Overflow用户

发布于 2015-02-19 02:10:30

在这种情况下,如果没有tableb的tablec条目,则整个连接将失败,并且将不包括tablea行。要包括tablsa条目,您需要将tablc的连接设置为左连接:

代码语言:javascript
复制
select a.column, c.name
from tablea a
left join tableb b on a.id = b.id
left join tablec c on b.name_id = c.name

这样,即使没有匹配的tableb行,也会得到每个tablea行,当没有tablec行时,还会得到每个tablea和tableb。

票数 4
EN

Stack Overflow用户

发布于 2015-02-19 02:32:33

就SQL而言,连接顺序是无关紧要的(连接条件所暗示的任何顺序除外)。就像这样

代码语言:javascript
复制
select *
from      t1
left join t2 on t2.t1_id = t1.id
join      t3 on t3.id    = t1.t3_id

完全相同于

代码语言:javascript
复制
select *
from      t1
join      t3 on t3.id    = t1.t3_id
left join t2 on t2.t1_id = t1.id

下面是select查询如何工作的概念模型。当然,需要注意的是,由于第1步所暗示的性能影响,只有最简单的SQL实现才会真正做到这一点。然而,结果就像您执行了下面的步骤一样。

  1. 构造from子句中指定的所有表的笛卡尔乘积。这是您的候选结果集。
  2. 应用联接标准以排除候选结果集中的行。
  3. 应用where子句中指定的标准以进一步缩小结果集的范围。

注意:第2步和第3步中的区别可能会更改结果集,具体取决于特定测试是放在where子句中还是放在join条件中。这不是内部连接的问题,但是对于外部连接,测试的位置可以实质性地改变结果。不要问我是如何知道这一点的。

  • 应用group by子句中指定的条件(如果有)将结果集划分为多个组。

  • 对于每个组,计算每个组的任何聚合函数的值,并将其放入一行,该行由其键值(来自group by子句)及其聚合函数的值组成。通过应用having子句中指定的条件(如果有),

  • 将筛选结果集。

  • 此时,您就得到了最终的结果集。根据order by子句中指定的条件对其进行排序。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28590173

复制
相关文章

相似问题

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