首页 > 解决方案 > 我如何检查现有记录并避免冗余数据

问题描述

我有两个表,都位于不同的服务器上,属于不同的模式。

表 1SALARY_DETAIL_REPORT_[monthYearSuffix]-与表 2 相同的副本。

表 2XXMPCD_SALARY_DETAIL_TABLE- 包含员工的工资相关数据,每个员工有多个工资代码,如HOUSE RENT ALLOW,DEARNESS ALLOW, NPS-Company Contri(Earning), BASIC PAY, NET EARNING, GROSS DEDUCTION, GROSS EARNING, GROSS DEDUCTION, NET EARNING, BASIC PAY, GRADE PAY

因此员工代码重复多次,因此我们无法维护主键或唯一索引。

假设在TABLE 2中推送了 1000 条记录,我需要将它们完全复制到我的TABLE 1中。这是由我的 SPRING 服务类处理的,一个 GUI 可用,我们只需单击迁移按钮,后台运行的服务从表 2中获取数据并将其插入到表 1中。

表 2中有两列

1.PICK_DATE
2.IS_DATA_PICKED

如果这两个数据都包含null那只是意味着数据没有迁移到我们的表 1中,我们在成功迁移后通过确认更新了相同的列,因此下次数据将无法用于迁移。

问题

现在假设我们将 1000 条记录从TABLE 2迁移到TABLE 1。我做了什么,我回到我的 SQL DEVELOPER,选择 3 个随机记录并将它们的PICK_DATE&设置IS_DATA_PICKEDNULL.

现在我又迁移了一次,再次插入了这 3 条记录。这意味着复制 3 条记录,1000 条记录变为 1003 条。

现在我要检查的内容:

如果存在相同的数据,则应该更新而不插入记录,这意味着覆盖。

TABLE 1:SALARY_DETAIL_REPORT_092018
SALARY_REPORT_ID
EMP_NAME
EMP_CODE
PAY_CODE
PAY_CODE_NAME
AMOUNT
PAY_MODE
PAY_CODE_DESC
YYYYMM
REMARK
EMP_ID
PRAN_NUMBER
PF_NUMBER
PRAN_NO
ATTOFF_EMPCODE
REFERENCE_ID

**

TABLE 2:XXMPCD_SALARY_DETAIL_TABLE         
EMP_NAME
EMP_CODE
PAY_CODE
AMOUNT
PAY_MODE
PAY_CODE_NAME
YYYYMM
REMARK
PUSH_DATE
PICK_DATE
IS_DATA_PICKED
ERROR_MESG
REFERENCE_ID
PRAYAS_ERP_ORG_ID
ERP_ORG_ID
PF_NUM
PRAN_NO
VERIFIED_BY

标签: sqloracle

解决方案


推荐阅读