Join 一个表中每行的配置单元连接另一个表中的所有行
在表Join 一个表中每行的配置单元连接另一个表中的所有行,join,hive,Join,Hive,在表A中,我有日期从2014-01-01到2014-12-31 action_date 2014-01-01 2014-01-02 2014-01-03 ... 2014-12-31 在表B中,我有如下信息 id name action_date deletion_date 1 nik 2013-01-01 2014-02-03 2 tom 2014-06-02 2014-06-30 3 lola 2013-12-30 2014-01-01 4 pete 2014
A
中,我有日期从2014-01-01
到2014-12-31
action_date
2014-01-01
2014-01-02
2014-01-03
...
2014-12-31
在表B
中,我有如下信息
id name action_date deletion_date
1 nik 2013-01-01 2014-02-03
2 tom 2014-06-02 2014-06-30
3 lola 2013-12-30 2014-01-01
4 pete 2014-12-29 1970-01-01
我想将B表中的行连接到每个
A
表行,如果activation\u date根据错误,由于两个表中的列名相同而出现问题。对表使用别名,并在条件中指定别名。。这将解决问题。您可以使用WHERE来执行[filtering][1],而不是在ON子句中使用=条件。选择a.*,t3.*从一个t3连接B v3 ON(v3.id=t3.no),其中v3.sdate=t3.actualdate[1]:@Mus7afa,那么在ON语句中应该使用什么条件?检查您的查询,“ON action\u date>=activation\u date”您犯了这一行错误。它应该是“行动日期=激活日期”。选择a.action\u date,b.*从b加入a(a.action\u date=b.action\u date),其中b.action\u date
action_date id name action_date deletion_date
2014-01-01 1 nik 2013-01-01 2014-02-03
2014-01-01 3 lola 2013-12-30 2014-01-01
2014-01-02 1 nik 2013-01-01 2014-02-03
2014-01-03 1 nik 2013-01-01 2014-02-03
[...]
2014-02-03 1 nik 2013-01-01 2014-02-03
2014-06-02 2 tom 2014-06-02 2014-06-30
2014-06-03 2 tom 2014-06-02 2014-06-30
[...]
2014-06-03 2 tom 2014-06-02 2014-06-30
2014-12-29 4 pete 2014-12-29 1970-01-01
2014-12-30 4 pete 2014-12-29 1970-01-01
2014-12-31 4 pete 2014-12-29 1970-01-01
SELECT a.action_date, b.*
FROM b
JOIN a ON action_date>= activation_date
AND (action_date<=deletion_date OR deletion_date='1970-01-01')