鉴于table1:
id event_date bar
1 2016-01-01 100
并且表2:
id begin_date end_date foo bar
1 2016-01-01 2016-12-31 1 100
1 2017-01-01 2017-01-01 2 NULL
我想:
...
table1
left join table2
on table1.id = table2.id
and table2.event_date between table1.begin_date and table1.end_date
通常,我只是做一个外连接:
OR event_date is null
但是Hive不允许我们这样做。所以我尝试将日期比较下移到where子句,然后添加...
table1
left join table2
on table1.id = table2.id
where
(table2.event_date is null OR
table2.event_date between table1.start_date and table1.end_date)
:
{{1}}
但它最终像内部联接一样工作,所以我没有得到2017年的回归。我做错了什么,还是有另一种方法来解决这个问题?
答案 0 :(得分:0)
你没有得到2017年的行,因为你将它放在where
子句中 - 该行不会在null
中获得event_date
且日期条件也是假的。< / p>
按照您的示例,如果您希望bar
为空 - 您需要将条件移至select子句:
select t1.id, begin_date, end_date, foo,
if(table2.event_date is not null and
table2.event_date between table1.start_date and table1.end_date, bar, null) from
table1 left join table2
on table1.id = table2.id;