找到两个表之间的数据差异

时间:2018-04-02 23:23:25

标签: sql pgadmin

所以我一直试图找到两个表之间的数据差异。在我的一个表格(旧数据)中,我大约有大约16,000行数据。在我的新表中,我有大约18,000行数据。所以我知道应该有大约2,000个数据差异。我试图找到在新表中添加或删除或编辑的确切内容。这是我目前正在使用的代码:

SELECT UPC, Name
FROM ITEMS_032818 AS ND
WHERE (NOT EXISTS
        (SELECT UPC, NAME
         FROM ITEMS AS OD
         WHERE ( UPC = ND.UPC) OR ( NAME = ND.NAME)));

UPC是产品SKU的另一个词,NAME当然是产品的名称。当我运行它时,它返回2388行数据,这不错,但我仍然可以找到两个表中返回的数据。

2 个答案:

答案 0 :(得分:0)

嗯。如何比较UPC / Name的值,比如说。假设这对在每个表中都是唯一的:

select upc, name, sum(in_old) as in_old, sum(in_new) as in_new
from ((select upc, name, 1 as in_old, 0 as in_new
       from ITEMS_032818
      ) union all
      (select upc, name, 0, 1
       from items
      )
     ) un
group by upc, name
having sum(in_old) <> 1 or sum(in_new) <> 1;

如果某些内容的in_new为0,则表示该内容已被删除。如果in_old为0,则表示已添加。

答案 1 :(得分:0)

-- added --
select 'added' type, * from item n 
where not exists (select 1 from item_031818 o where o.upc = n.upc and o.name = n.name )
-- deleted ---
UNION ALL
select 'deleted',* from item_031818 o
where not exists ( select 1 from item n where n.upc = o.upc and n.name = o.name)

如果没有表格结构(例如主键)和规则,则无法确定编辑了哪些记录。