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

--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

   

    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
UNION ALL

猜你喜欢

转载自blog.csdn.net/someInNeed/article/details/108679021
今日推荐