从 postgresql 数据库中选择值并根据我需要完整查询插入/更新

Posted

技术标签:

【中文标题】从 postgresql 数据库中选择值并根据我需要完整查询插入/更新【英文标题】:select the values from the postgresql database and insert/update based on that i need complete query 【发布时间】: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标签? 【参考方案1】:

如果我理解您的问题,您可以通过使用 postgresql 的 TRIGGERS 来强制执行这种行为。 您必须在引用触发器函数的表中创建触发器。

有关在此处创建触发器的更多信息: http://www.postgresql.org/docs/current/static/sql-createtrigger.html

以及有关在此处创建触发器函数的信息: http://www.postgresql.org/docs/current/static/plpgsql-trigger.html

【讨论】:

我错误地在亚马逊redshift中添加了我需要的mysql,它不支持任何触发器或程序。Postgre和reshift都是一样的,唯一的区别是触发器和程序不可用。这就是我提到的作为一个postgresql 多次阅读您的评论后,我仍然无法理解您想要什么...请更清楚您正在使用的数据库以及您面临的问题,请用可读的英语。

以上是关于从 postgresql 数据库中选择值并根据我需要完整查询插入/更新的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 全部

在Mysql数据库中插入动态选择框值并显示数据提交消息

如何根据 Id 从多个表中获取值并根据 id 创建新表

选择获取数据属性值并嵌入为选择选项

来自 csv 文件的 PostgreSQL 查询 [重复]

PostgreSQL的NoSQL特性