Sql 比较不同oracle数据库中重复表中的记录

Sql 比较不同oracle数据库中重复表中的记录,sql,oracle,Sql,Oracle,我在两个oracle数据库中有相同的表。一个是将其记录加载到主数据库中的暂存数据库。我想查看staging表,看看主记录是否没有更改。如果没有,则将其删除。我怎样才能做到这一点呢?像这样的方法应该行得通 delete from stagingtable where id in (select id from stagingtable st join productiontable pt on st.id = pt.id and st.nextfield = pt.nextfield etc )

我在两个oracle数据库中有相同的表。一个是将其记录加载到主数据库中的暂存数据库。我想查看staging表,看看主记录是否没有更改。如果没有,则将其删除。我怎样才能做到这一点呢?

像这样的方法应该行得通

delete from stagingtable
where id in
(select id
from stagingtable st join productiontable pt on st.id = pt.id
and st.nextfield = pt.nextfield
etc
)

要获取发生变化的内容,您可以使用:

SELECT * FROM "staging_table"
MINUS
SELECT * FROM "table";
因此,假设表有一个主键,那么您可以

DELETE FROM "table"
WHERE primary_key_column
      NOT IN 
      ( SELECT primary_key_column
        FROM (
          SELECT * FROM "staging_table"
          MINUS
          SELECT * FROM "table"
        )
      );

您应该添加表架构以使其更易于帮助您。如果选择*,则暂存表和生产表必须具有相同的结构。这让我觉得很不寻常。如果它们不一样,那么您可以用共享列替换
*
s。