为什么MaxComputer的LEFT JOIN结果和inner join一样只查询有关联上的数据,没有保留左表的全部数据呢?
在 MaxCompute 中,LEFT JOIN
和 INNER JOIN
在处理左表数据的方式上确实存在差异。
INNER JOIN
INNER JOIN
只返回两张表中都有关联关系的行。这意味着如果左表中的某行在右表中没有匹配的行,则该行不会出现在结果集中。
LEFT JOIN
LEFT JOIN
返回左表中的所有行,即使它们在右表中没有匹配的行。对于没有匹配行的左表行,右表中的列值将显示为 NULL
。
差异原因
LEFT JOIN
和 INNER JOIN
使用不同的算法来执行连接操作。INNER JOIN
使用哈希连接,该算法只关注两张表中具有匹配关联键的行。另一方面,LEFT JOIN
使用嵌套循环连接,该算法遍历左表中的每行,并检查它是否与右表中的任何行匹配。
示例
考虑以下两张表:
表 A
id | name |
---|---|
1 | John |
2 | Mary |
3 | Bob |
表 B
id | city |
---|---|
1 | New York |
2 | London |
INNER JOIN 结果
| id | name | city |
|---|---|---|
| 1 | John | New York |
| 2 | Mary | London |
LEFT JOIN 结果
| id | name | city |
|---|---|---|
| 1 | John | New York |
| 2 | Mary | London |
| 3 | Bob | NULL |
如您所见,LEFT JOIN
返回了左表中的所有行,即使 id=3
的行在右表中没有匹配的行。
结论
总之,LEFT JOIN
和 INNER JOIN
在处理左表数据的方式上不同,因为它们使用不同的连接算法。LEFT JOIN
保留左表中的所有行,而 INNER JOIN
只返回两张表中都有关联关系的行。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。