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 ,这种方式看起来有点复杂,不过执行效率是不是比前两个高呢,有时间测试一下。