数仓拉链表

LEFT JOIN +UNION ALL的写法

主要思路就是:变更的历史数据闭链,新增(包含变更)的还有没匹配到的数据开链

SQL:

sql 复制代码
SELECT
     zip.*
    ,zip.date_start
    ,if(di.employee_id is null,'99991231',di.dt) as date_end
FROM (select * from user_zip_di where date_end = '99991231') zip
LEFT JOIN update_data_table di on zip.employee_id = di.employee_id

UNION ALL

SELECT *
    ,dt as date_start
    ,'99991231' as date_end
FROM update_data_table