通过仅选择符合条件的记录,从 table 中删除其他 table 中不存在的行

Delete rows from table which does not exists in other table by picking eligible records only

我正在使用 Oracle。我需要从一个 table 中删除其他 table 中不存在的行,方法是将其与仅具有合格 ID 的 table 连接起来。 对不起,我不确定如何更好地解释它。下面是一个例子。 ID+SUB_ID是PK

Final_table - 
ID SUB_ID  Name
1  1       Football
1  2       Cricket
1  3       Formula1
1  4       Tennis
2  1       Hockey
2  2       Archery
2  3       Badminton
3  1       Basketball
3  2       Dodgeball 

Latest_Table
ID SUB_ID  Name
1  1       Football
1  2       Cricket
1  3       Formula1
2  1       Hockey
2  2       Archery
3  1       Basketball

Sample_Table
ID
1
3

在上面的示例中,我在 ID 列上加入了 Latest_table 和 Sample_Table,它给了我 ID (1,3)。现在基于这些符合条件的 ID,我想从 Final_Table 中删除 Latest_Table 中不存在的行。我不希望它删除 ID=2 的任何内容,因为它不符合条件。 我写了下面的代码,但它正在删除 FINAL_TABLE 中不存在于 Latest_table.

中的所有内容
Delete from FINAL_TABLE FT
where not exists 
(select 1 from 
Latest_table LT, Sample_table ST
where LT.ID = ST.ID
and LT.ID = FT.ID
and LT.SUB_ID = FT.SUB_ID);

感谢您的帮助。

已编辑- Final_Table 中的期望结果应该类似于

Final_table - 
ID SUB_ID  Name
1  1       Football
1  2       Cricket
1  3       Formula1
2  1       Hockey
2  2       Archery
2  3       Badminton
3  1       Basketball

编辑:我最初误读了您的查询。我已更改我的答案以在第一个条件中删除对 Sample_Table 的连接。

Delete from FINAL_TABLE FT
where not exists 
(select 1 from 
Latest_table LT
where LT.ID = FT.ID
and LT.NAME = FT.NAME
and LT.SUB_ID = FT.SUB_ID)
AND FT.id IN
(
 SELECT id FROM Sample_Table
)

如果 ID 出现在 Sample_Table 中并且记录(所有 3 列)没有出现在 Latest_table 中,这只会从 Final_Table 中删除。

另一种写法是

Delete from FINAL_TABLE FT
where 
  (FT.ID, FT.SUB_ID, FT.NAME) NOT IN
   (SELECT LT.ID, LT.SUB_ID, LT.NAME FROM Latest_table LT)
 AND FT.ID IN
  (SELECT ST.id FROM Sample_Table ST)