我有两个表如下
表_1
APP_MED_CHIP_ID APPLICATION_ID PERSON_ID
248340 1228144 1028940
248342 1228144 1028940
328526 1273218 818905
328527 1273218 1386405
328528 1273218 1386407
表_2
APP_MED_CHIP_DETAIL_ID APP_MED_CHIP_ID
92574 248342
在表1中,前2条记录是重复的,因为它们具有相同的application_id和person_id,因此我需要获取这2条记录中的APP_MED_CHIP_ID(248340,248342),检查它们是否存在于表2中,然后从表1中删除该记录,在表2中不存在。
我已使用以下查询选择所有重复项。
SELECT * FROM <br>
(SELECT ROW_NUMBER() OVER (PARTITION BY APPLICATION_ID,PERSON_ID ORDER BY APPLICATION_ID,PERSON_ID) as ROW,*
FROM Table_1) as p<br>
where p.APP_MED_CHIP_ID not in<br>
(select APP_MED_CHIP_ID from Table_2)<br>
and p.ROW > 1
我的查询问题是表_1中的第一组记录,我的结果集将不会显示第一组记录,因为我使用了条件p.ROW> 1,但是如果我不使用此条件,我将无法进行过滤重复项。
我只显示了两组记录作为示例,但是在table_1中还有许多其他记录。
请提供有关如何解决此问题的建议。
谢谢你。
从表1中删除表2中不存在的记录
因此,我认为您想删除Table_1中不存在于Table_2中的“重复”行。仅当按APPLICATION_ID和PERSON_ID分组时,如果记录多于记录,则只想删除行。
您可能会执行以下操作:
Delete From Table_1
Where APP_MED_CHIP_ID Not In
(
Select APP_MED_CHIP_ID From Table_2
)
And Exists
(
Select 1 From Table_1 As T1
Where Table_1.APPLICATION_ID = T1.APPLICATION_ID
And Table_1.PERSON_ID = T1.PERSON_ID
Having Count(*) > 1
)
当然,根本问题是Table_1中允许使用脏数据。如果你有过任何DDL控制,你可以把一个约束的Table_1
,如FK其中Table_1.APP_MED_CHIP_ID
引用Table_2.APP_MED_CHIP_ID
或唯一约束Table_1
列(APPLICATION_ID
,PERSON_ID
)。如果您对DDL没有任何控制权,那么我对您有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句