Hive的on不支持非等值连接解决,不支持or

本文探讨了Hive中不支持非等值连接和OR条件的问题,提出了三种解决方案:1) 使用UNION替换LEFT JOIN处理不等连接;2) 通过额外操作配合等值连接;3) 利用笛卡尔积结合WHERE筛选。针对关联条件含OR的情况,建议使用UNION来拆分条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--oracle
SELECT 
	a.*,
	b.id ASb_id,
	b.class AS b_class
FROM lpx_test_a a
LEFT OUTER JOIN lpx_test_b b
  ON (a.id = b.id AND a.class < b.class);

 连接条件的第二个是非等值的,不能照搬上面

--hive
SELECT a.*,
	CASE WHEN a.class < b.class THEN b.idEND AS b_id,
	CASE WHEN a.class < b.class THEN   b.class END AS b_class
FROM lpx_test_a a
LEFT OUTER JOIN lpx_test_b b
  ON (a.id = b.id);

第一种方式:union的方式解决left join的不等连接(补上右表为null的那部分表,也就是union all右表为空的表) 但是left join太多的时候union all的分类讨论太多了且层次不清

SELECT 
    * 
FROM A
LEFT JOIN B ON A.id=B.id AND A.id2=B.id2
WHERE A.startTime<= B.time AND B.time < A.endTime

   

    SELEC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值