如何通过将表与旧版本进行比较来获取更改的行?

时间:2013-11-05 13:58:21

标签: mysql sql database oracle plsql

我有一个日志表和一个视图。 我想通过将给定的ID_NO与日志表进行比较来从视图中获取更改的行。 ID_NO在两个表之间是固定的,而其他列可以更改。

简而言之,我想从Table1中获取行,与Table2相比,这些行还有一个更改的列。

例如:

TABLE 1:
ID COL1 COL2 COL3
1  A    B    C
2  34   56   D
3  F    XY   24

TABLE 2:
ID COL1 COL2 COL3
1  A    B    C
2  34   56   F
3  1    XY   24

查询应该从TABLE2返回以下内容:

ID COL1 COL2 COL3
2  34   56   F
3  1    XY   24

请指教。 非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以向更改表添加触发器,该触发器将id插入第二个表中,该表用于标识更改表中已更改的行。只是比较表之间的值可能会起作用,但需要大量的工作。获取已更改行的ID可能更容易。

如果您还想拥有旧值,请将更改后的列和值添加到日志记录表中。

答案 1 :(得分:0)

SELECT  *
FROM    one_view  vw
WHERE   EXISTS
        (
            SELECT  1
            FROM    log_table  t
            WHERE   vw.id_no = t.id_no
        )
;

问题更新后的说明:

SELECT  *
FROM    table_2  t1
WHERE   EXISTS
        (
            SELECT  1
            FROM    table_1  t2
            WHERE   t1.id_no = t2.id_no
            AND
            (
                    t1.col1 <> t2.col1
                OR  t1.col2 <> t2.col2
                OR  t1.col3 <> t2.col3
            )
        )
;