【问题标题】:DB2 LUW MERGE using same table to update a different rowDB2 LUW MERGE 使用同一个表来更新不同的行
【发布时间】:2022-01-06 05:33:19
【问题描述】:

我的表格数据是这样的

我尝试失败的 SQL 是这样的......

MERGE INTO PRINT target  
USING  
(  
    select ID,PDF_FILE   
    from PRINT  
    where date(PRINTED) = '2022-01-06'  
      and PDF_FILE is not null  
) sause  
ON (target.ID = sause.ID)  
WHEN MATCHED THEN  
    UPDATE SET target.PDF_FILE = sause.PDF_FILE  

它正在更新表中的所有行。我不想要这个。

我怎样才能让它只更新具有空 PDF_FILE 的 1 个最新的 PRINTED 行?

【问题讨论】:

    标签: sql merge db2-luw


    【解决方案1】:

    这个想法是枚举目标行并仅更新第一行。

    MERGE INTO 
    (
    SELECT ID, PDF_FILE, ROW_NUMBER () OVER (PARTITION BY ID ORDER BY PRINTED DESC) AS RN_ 
    FROM PRINT
    WHERE
    -- Below is an appropriate condition for
    -- the target rows to distinguish them from the source row
    
    -- PDF_FILE IS NULL
    date (PRINTED) <> '2022-01-06'
    ) target
    USING
    (
    select ID,PDF_FILE
    from PRINT
    where date (PRINTED) = '2022-01-06'
    and PDF_FILE is not null
    ) sause
    ON target.ID = sause.ID AND target.RN_ = 1 
    WHEN MATCHED THEN
    UPDATE SET target.PDF_FILE = sause.PDF_FILE
    

    【讨论】:

      猜你喜欢
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多