【发布时间】:2013-06-11 16:00:00
【问题描述】:
我需要在查询级别进行设计,是否可以对表中的版本、已删除、标记列执行此操作。
src_emp---->源表
empno,ename,sal
1 ,aaa ,1000
2 ,bbb ,2000
3 ,ccc ,3000
第一次加载目标表 trg_emp 输出如下所示
empkey,empno,ename,sal ,version,flag,deleted
1 ,1 ,aaa ,1000 ,1 ,Y ,N
2 ,2 ,bbb ,2000 ,1 ,Y ,N
3 ,3 ,ccc ,3000 ,1 ,Y ,N
现在,在这样做之后,我会将 empno=3 的薪水更改为 sal=4000 然后更新我的目标表后看起来像
empkey,empno,ename,sal ,version,flag,deleted
1 ,1 ,aaa ,1000 ,1 ,Y ,N
2 ,2 ,bbb ,2000 ,1 ,Y ,N
3 ,3 ,ccc ,3000 ,1 ,N ,N
4 ,3 ,ccc ,4000 ,2 ,Y ,N
您可以在上面观察到 empno=3 的版本增加到 2 并且最后一行的标志已更改为“Y”,而前一行的标志已更改为 empno=3 的“N” 好的,一旦版本和标志起作用,如果在源中删除任何记录,则删除第三个,然后该标志必须变为“Y” 假设如果我在源表中删除 empno=2 那么我的最终目标表应该如下格式
empkey,empno,ename,sal,version,flag,deleted
1,1,aaa,1000,1,Y,N
2,2,bbb,2000,1,Y,Y
3,3,ccc,3000,1,N,N
4,3,ccc,4000,2,Y,N
在目标表第二行标志必须更新已删除标志值为“Y”。
【问题讨论】:
-
我不清楚你的问题是什么。您是否尝试使用第一个和第三个列表来获取最后一个列表?另外你真的同时使用 mysql 和 postgresql 吗?
-
我同意康拉德弗里克斯的观点。我不明白你在问什么,或者你想在这里完成什么。您应该清楚地说明您的问题、遇到的任何错误以及您使用的技术(和版本)。
-
如果这就是应该始终修改该表的方式,我会使用存储过程来完成这项工作。 (他们在 PostgreSQL 中调用 存储函数 吗?)无论如何,我附议@Conrad 关于在 MySQL 和 PostgreSQL 中是否需要这个的问题。你是不是误加了
mysql标签?
标签: postgresql amazon-redshift