我有两张表格如下
TABLE_1
APP_MED_CHIP_ID APPLICATION_ID PERSON_ID
248340 1228144 1028940
248342 1228144 1028940
328526 1273218 818905
328527 1273218 1386405
328528 1273218 1386407
TABLE_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中是否存在这些记录,然后从中删除记录表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
我的查询问题在于Table_1中的第一组记录,我的结果集不会显示第一组记录,因为我使用条件p.ROW&gt; 1,但如果我不使用这个条件,我将无法过滤重复项。
我只显示了两组记录作为示例,但我的table_1中还有许多其他记录。
请告知如何解决此问题。
谢谢。
答案 0 :(得分:1)
从表1中删除表2中不存在的记录
所以,我认为你想删除&#34;重复&#34; Table_1中的行,表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
上设置约束,例如Table_1.APP_MED_CHIP_ID
引用Table_2.APP_MED_CHIP_ID
的FK或Table_1
列上的唯一约束({ {1}},APPLICATION_ID
)。如果你对DDL没有任何控制权,我觉得你。