Hive 一种奇怪的SQl写法
问题描述
想要从用户表 temp_user_list 取一些数据,具体取数逻辑如下:
prov_id ='011' 并且 product_id = '1195362,或者 prov_id ='010' 并且 product_id = '1089562, 这个题目是不是很简单,但是仔细想来实现起来有很多方式,接下来看看我第一时间想出来的三种实现方式的差异
方式1
select t.user_id, t.prov_id, t.product_id from temp_user_list t where ((prov_id = '011' and product_id = '1195362') or (prov_id = '010' and product_id = '1089562'));
限制条件中间使用 or 进行连接,取数条件多的时候再加几个 or 表达式就好了
方式2
select t.user_id, t.prov_id, t.product_id from temp_user_list t where (t.prov_id, t.product_id) in (('011', '1195362'), ('010', '1089562'));
这种方式看起来相对简介一点,条件多的时候直接在后面加括号进行新增限制逻辑即可。
方式3
select t.user_id, t.prov_id, t.product_id from temp_user_list t left semi join (select '011' prov_id, '1195362' product_id union all select '010', '1089562') t1 on t.prov_id = t1.prov_id and t.product_id = t1.product_id;
使用 union all 构建子查询,使用主表进行 left semi join ,这种方式看起来有点复杂,不过执行效率是不是比前两个高呢,有时间测试一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
2022-02-09 centos 7 提示 xxx command not found
2022-02-09 hive求不及格课程数大于等于2的学生的平均成绩及其排名