我在 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 列
我的第一个想法是这样的
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 并尝试合并它的提示,但我不知道如何...