通过仅选择符合条件的记录,从 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)
我正在使用 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)