从2个相同的表中选择修改后的数据然后更新

时间:2017-03-13 12:59:11

标签: sql database oracle

我有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

0 个答案:

没有答案