我有2个表(92列),列相同,但数据不同。 PK是Report_NR和File_Number
表1:Original_Report:
Report_Nr File_Number Time Minute Work_Hours .........
--------------------------------------------------
1 1 3 2 6
2 1 5 1 8
3 1 2 4 7
表2:Modified_Report:
Report_Nr File_Number Time Minute Work_Hours .........
--------------------------------------------------
1 1 3 2 8
2 1 5 1 8
3 1 1 2 7
4 1 5 6 6
现在我想搜索从表2输入的新数据或修改数据,然后将表1更新为与表2相同。例如,在我的情况下,对于report_id 1,仅更新具有已修改数据的列:Work_Hours。因此我只需更新此列,对于report_id 2,两个表中的数据相同,因此不需要更新,第三行需要仅更新时间和分钟,第四行我需要插入所有列。
通过此选择,我已识别出新行和已修改的行:
-- NEW ROWS
SELECT A.*, 'NEW'
FROM Modified_Report A
LEFT JOIN Original_Report B ON B.ID = A.ID
UNION
-- MODIFIED ROWS
SELECT B.*, 'MODIFIED'
FROM (
SELECT * FROM Modified_Report
MINUS
SELECT * FROM Original_Report
) S1
INNER JOIN Original_Report B ON S1.ID = B.ID;
在这里,我发现了包含更新的涂层信息:update one table with data from another
但我需要更新未知数量的列:对于一行我可以有2列我需要修改或10或40。 此外,我还需要修改哪些列,以及每列发现了多少更改。
将是使用程序或功能的解决方案,还是您有其他想法?
我在SQL Developer中使用了Oracle DB