开发者社区> 问答> 正文

数仓中left semi join和left join有什么区别?

数仓中left semi join和left join有什么区别?

展开
收起
游客ahv54x37wvm7u 2021-12-12 20:39:39 1473 0
1 条回答
写回答
取消 提交回答
  • left semi join 左半连接

              in(keySet),相当于在右表中查询左表的key, left semi join 是 in(keySet) 的关系,遇到右表重复记录,左表会跳过;当右表不存在的时候,左表数据不会显示; 相当于SQL的in语句.比如测试的语句相当于
    
    select * from table1 where table1.student_no in (table2.student_no)
    
             注意,结果中是没有B表的字段的.LEFT SEMI JOIN 是 IN/EXISTS 子查询的一种更高效的实现;Hive 当前没有实现 IN/EXISTS 子查询,所以你可以用 LEFT SEMI JOIN 重写你的子查询语句。LEFT SEMI JOIN 的限制是, JOIN 子句中右边的表只能在 ON 子句中设置过滤条件,在 WHERE 子句、SELECT 子句或其他地方过滤都不行
    

    left join

       当右表不存在的时候,则会显示NULL
    
    select * from table1 left semi join table2 on(table1.student_no=table2.student_no);结果:1 name12 name23 name34 name45 name5
    select * from table1 left outer join table2 on(table1.student_no=table2.student_no);结果:
    1 name1 1 111 name1 1 121 name1 1 132 name2 2 112 name2 2 143 name3 3 153 name3 3 124 name
    
    2021-12-12 20:40:55
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云云原生一体化数仓 立即下载
基于云原生数据仓库AnalyticDB PG的最佳实践 立即下载
新氧云原生全栈数仓最佳实践 立即下载