在postgreSQL中比较2个具有相同结构的表

时间:2014-03-09 01:01:30

标签: sql postgresql

好吧,我有一个名为“Lov(值列表)”的表,它具有以下结构:

CREATE TABLE lov
(
  tipo integer NOT NULL,
  id serial NOT NULL,
  codigo character varying(255),
  descricao character varying(255),
  CONSTRAINT lov_pkey PRIMARY KEY (id )
)

我有另一个名为lov_tmp的表,其结构与上面相同,这两个表之间唯一的区别是lov_tmp包含来自中央数据库的原始数据,而lov包含来自本地数据库的数据。

我需要比较这2个表,找到值:  1-插入lov_tmp并且没有在lov中,  2-更改/更新了lov_tmp并且没有在lov中,  3-在lov_tmp中删除但没有在lov中删除。

我无法比较ID(PK),因为它们在每个数据库中都是不同的,我只能比较“codigo,tipo和descricao”列。

一些想法?

1 个答案:

答案 0 :(得分:0)

如果您拥有的任何字段(codigo,tipo和descricao)可以用作唯一键或复合键...您可以选择进入temp,过滤掉那些没有的存在于一个(或另一个)

不确定postgressql语法的外观如何,但这里是从一个不在另一个表中选择临时内容的基本思路。

SELECT 
     l.*
INTO 
     #someTempTable
FROM 
    lov l
WHERE NOT EXISTS 
(SELECT <<someUniqueOrCompositeKey>> FROM lov_tmp)

这会告诉你哪些行不匹配。