我需要在employee\u id上将tablea连接到tableb,并且表a中的calu日期必须介于表b中的date start和date end之间。我跑了下面的查询,收到下面的错误信息,请您帮我改正和查询。谢谢你的帮助!
在join'date\u start'中同时遇到了左别名和右别名。
select a.*, b.skill_group
from tableA a
left join tableB b
on a.employee_id= b.employee_id
and a.cal_date >= b.date_start
and a.cal_date <= b.date_end
3条答案
按热度按时间4dbbbstv1#
马克乌西尼奇有一个很好的解决方案,但有一个主要问题。如果表a在日期范围内有两次雇员id,表c也会有两次雇员id(如果b是唯一的,如果不是更多),在联接后创建4条记录。因此,如果在员工id上不是唯一的,则需要一个分组依据。更正如下:
请注意:如果b故意不区分(雇员id,技能组),那么我上面的查询也必须修改以适当反映这一点。
ruoxqz4g2#
如果您的情况允许,可以分两次查询。
先用全连接,可以有范围;然后使用一个外部连接,匹配所有列,但包含一个where子句,用于其中一个字段为null。
前任:
jmp7cifd3#
rtfm-引用语言手动连接
配置单元不支持非相等条件的联接条件,因为很难将此类条件表示为map/reduce作业。
您可能会尝试将between筛选器移动到where子句,从而导致糟糕的部分笛卡尔连接,然后进行后期处理清理。讨厌。根据“技能组”表的实际基数,它可能工作得很快,或者需要一整天的时间。