zoukankan      html  css  js  c++  java
  • 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
                );

     结果如下:

  • 相关阅读:
    COGS 2104. [NOIP2015]神奇的幻方
    洛谷 P1387 最大正方形
    包和一些常用的模块
    模块
    模块的导入和使用
    函数迭代器与生成器
    函数的小知识
    函数的闭包和装饰器
    函数的进阶
    初识函数
  • 原文地址:https://www.cnblogs.com/tester-hehehe/p/6553380.html
Copyright © 2011-2022 走看看