根据与先前数据的差异更新数据

时间:2016-03-28 10:25:51

标签: sql postgresql

我有两个名为curtestprevtest

的表

prevtest有以下数据:

data    value
pen      10
book     20  

curtest有以下数据:

data    value
book    30 

如果curtest的数据与prevtest的最后一行不同,而不是curtest表中的prevtest数据,那么prevtest数据将为:< / p>

data   value
pen    10
book   20
book   30 

表格中有20列。如果任何一个或一组列的数据发生变化,那么我需要在curtest表中插入prevtest数据,否则保持原样。

注意:两个表的签名将始终相同。

如何为此编写sql查询。任何帮助将非常感激。感谢。

2 个答案:

答案 0 :(得分:0)

您始终可以使用NON-Standard From子句:

UPDATE Table2
SET column1 = Table1.column1,
  column2 = Table1.column2,
  column3 = Table1.column3
FROM Table1
WHERE Table1.id = Table2.id

此外,如果需要,您可以创建trigger

答案 1 :(得分:0)

您想要插入新行,因此insert是正确的方法。我假设列curtestId指定了排序:

insert into prevtest(data, value)
    select ct.data, ct.value
    from curtest ct left join
         (select distinct on (data) pt.*
          from prevtest pt
          order by pt.data, pt.curtestId desc
         ) pt
         on ct.data = pt.data
    where (ct.value is distinct from pt.value);

请注意使用is distinct from来处理NULL值。

对于多列,您可以扩展where子句来处理所有这些。