SQL Oracle merge 2 tables with one compound pk on one table

问题描述 投票:0回答:0

我在 Oracle PL/SQL 中合并 2 个表时遇到问题。

我有

table_A
在列上有复合主键(
pk1, pk2, pk3

PK1 PK2 PK3 Column1a Column2a TMSP1
细胞 1 细胞 1 细胞 1 细胞 1 细胞 1 03/03/2023 下午 9:01
细胞 2 细胞 2 细胞 2 细胞 2 细胞 2 03/03/2023 下午 9:02
细胞 3 细胞 3 细胞 3 细胞 3 细胞 3 03/03/2023 下午 9:03

table_B
没有 pk,日期是唯一的但定义为 varchar:

TMSP2 ColVal1 ColVal2 ColVal3 ColVal4
03/03/2023 21:00 细胞 1 细胞 1 细胞 1 细胞 1
03/04/2023 09:02 细胞 2 细胞 2 细胞 2 细胞 2
03/04/2023 21:01 细胞 3 细胞 3 细胞 3 细胞 3

我需要使用 PK 并将所有 ColVal1/ColVal2/ColVal3/ColVal4 值从 Table_B 合并到 Table_A - Table_A 得到了同名的新列 ColVal1/ColVal2/ColVal3/ColVal4 准备从 Table_B 插入

Table_A 有 3 列使 PK、时间戳、少数其他列(如 Columna1a、Columna2a 等)和所有 ColVal 列准备好填充

Table_B 在 varchar 中有 1 个日期列和所有包含值的 ColVal 列

  • TMSP1 - 每 1 分钟时间戳中的时间戳 (AM/PM)
  • TMSP2 - 每 12 小时(24 小时制)的 varchar 时间戳

我的第一个想法是这样的

MERGE INTO table_a A
USING (SELECT  
           TMSP2, 
           LEAD(TMSP2, 1) AS NXT, 
           COLVAL1, COLVAL2, COLVAL3, COLVAL4 
       FROM TABLE_B) B ON A.TMSP1 <= to_date(B.TMSP2) 
                       AND A.TMSP1 >= to_date(B.NXT)

WHEN MATCHED THEN
    UPDATE 
        SET A.COLVAL1 = B.COLVAL2, 
            A.COLVAL1 = B.COLVAL2,
            A.COLVAL3 = B.COLAVAL3,
            A.COLVAL4 = B.COLVAL4;

但是它执行这个任务很多个小时,我没有得到任何结果,我有使用复合 PK 并尝试合并它的提示,但我不知道如何...

sql oracle date merge timestamp
© www.soinside.com 2019 - 2024. All rights reserved.