如何跟踪源表中的更改以及连接到它的表?

时间:2014-07-30 21:01:01

标签: sql oracle etl

假设我有这个SQL语句:

INSERT INTO MYTABLE 
select A.code,B.name,C.add
from codes A
left join names B on A.fid=B.id
left join addresses C on B.num=C.id
where A.datechanged>somedate;

这为A中被修改的每一行添加了新记录。我希望它也跟踪B和C中的变化,例如,如果B.datechanged> somedate为真,但A.datechanged> somedate为false,则仍会添加新行。

换句话说,我希望它从所有三个表中提取数据,如果datechanged> somedate任何一个表,而不仅仅是A.我怎么能这样做?我打算在FROM子句中使用不同的表重复相同的语句,但我有大约10个正在连接的表。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

听起来你只想要多个谓词和OR子句

WHERE a.datechanged > somedate
   OR b.datechanged > somedate
   OR c.datechanged > somedate

SQL语句指定要返回的特定集。使用标准布尔代数组合谓词以确定返回哪些行。在这种情况下,如果满足任何谓词,则将返回该行。显然,如果您使用AND来组合谓词,那么您将只获得满足所有三个条件的行。