我有一个日志表和一个视图。 我想通过将给定的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
请指教。 非常感谢!
答案 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
)
)
;