• merge实现拉链表


    建表如下( 历史拉链表):

    新表(每日更新的):

    实现语句:

    MERGE INTO test_target t1
    USING (
        SELECT nvl(c.id, b.id) AS id
            ,CASE 
                WHEN c.endtime = to_date('9999-12-30', 'yyyy-mm-dd')
                    AND b.id IS NULL
                    THEN c.STATUS
                WHEN c.id IS NULL
                    THEN b.STATUS
                END AS STATUS
            ,CASE 
                WHEN c.endtime = to_date('9999-12-30', 'yyyy-mm-dd')
                    AND b.id IS NULL
                    THEN c.begain
                WHEN c.id IS NULL
                    THEN to_date('2017-03-15', 'yyyy-mm-dd')
                END AS begain
            ,CASE 
                WHEN c.endtime = to_date('9999-12-30', 'yyyy-mm-dd')
                    AND b.id IS NULL
                    THEN to_date('2017-03-15', 'yyyy-mm-dd')
                WHEN c.id IS NULL
                    THEN to_date('9999-12-30', 'yyyy-mm-dd')
                END AS endtime
        FROM test_b b
        FULL JOIN test_target c ON b.id = c.id
            AND b.STATUS = c.STATUS
        WHERE c.id IS NULL
            OR (
                c.endtime = to_date('9999-12-30', 'yyyy-mm-dd')
                AND b.id IS NULL
                )
        ) t2
        ON (
                t1.id = t2.id
                AND t1.STATUS = t2.STATUS
                )
    WHEN MATCHED
        THEN
            UPDATE
            SET t1.endtime = t2.endtime
            WHERE t1.endtime = to_date('9999-12-30', 'yyyy-mm-dd')
    WHEN NOT MATCHED
        THEN
            INSERT
            VALUES (
                t2.id
                ,t2.STATUS
                ,t2.begain
                ,t2.endtime
                );

     结果如下:

  • 相关阅读:
    老杳:2017年中国集成电路产业十大新闻
    RMA退货流程解决方案
    Linux
    vue.js
    NET Core度身定制的AOP框架
    Timeline
    HTTP
    MVC 常用扩展点:过滤器、模型绑定等
    装箱拆箱
    jQuery Tree
  • 原文地址:https://www.cnblogs.com/tester-hehehe/p/6553380.html
Copyright © 2020-2023  润新知