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

posted @ 2023-02-09 05:09  晓枫的春天  阅读(47)  评论(0编辑  收藏  举报