Sql 查找两个表之间的数据差异

Sql 查找两个表之间的数据差异,sql,pgadmin,Sql,Pgadmin,所以我一直在试图找出两个表之间的数据差异。在我的一个旧数据表中,大约有16000行数据。在我的新表中,我有大约18000行数据。所以我知道应该有大约2000个数据差。我试图准确地找到新表中添加、删除或编辑的内容。这是我当前使用的代码: SELECT UPC, Name FROM ITEMS_032818 AS ND WHERE (NOT EXISTS (SELECT UPC, NAME FROM ITEMS AS OD WHERE ( UPC

所以我一直在试图找出两个表之间的数据差异。在我的一个旧数据表中,大约有16000行数据。在我的新表中,我有大约18000行数据。所以我知道应该有大约2000个数据差。我试图准确地找到新表中添加、删除或编辑的内容。这是我当前使用的代码:

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的另一个词,名称当然是产品的名称。当我运行这个程序时,它返回2388行数据,这还不错,但我仍然可以在两个表中找到返回的数据。

Hmmm。比较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;
如果某个内容的新名称为0,则该内容已被删除。如果它的in_old为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)

无法确定在没有表结构(例如主键和规则)的情况下编辑了哪些记录。

示例数据和所需结果会有所帮助。我试图从中得到的是添加到新项目表或从旧数据表中删除的内容。我的新数据表是我最新更新的项目。我想查看从我的旧数据中删除的内容,或添加到我的“新项目”列表中的、不在旧项目列表中的新产品。