0

我有一个日志表和一个视图。我想通过将视图与给定 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

请指教。非常感谢!

4

2 回答 2

0

您可以向更改表添加一个触发器,该触发器将 id 插入第二个表中,该表用于识别更改表中更改的行。仅比较表之间的值可能有效,但需要大量工作。获取更改行的 id 可能更容易。

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

于 2013-11-05T14:27:14.970 回答
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
            )
        )
;
于 2013-11-05T14:29:21.023 回答