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