我有两个名为curtest
和prevtest
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查询。任何帮助将非常感激。感谢。
答案 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
子句来处理所有这些。