oracle - 通过仅选择符合条件的记录从表中删除其他表中不存在的行
问题描述
我正在使用甲骨文。我需要删除一个表中不存在于其他表中的行,方法是将其与只有合格 ID 的表连接起来。对不起,我不知道如何更好地解释它。下面是一个例子。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 列上加入了带有 Sample_Table 的 Latest_table,它给了我 ID (1,3)。现在基于这些符合条件的ID,我想从Final_Table 中删除Latest_Table 中不存在的行。我不希望它删除 ID=2 的任何内容,因为它不符合条件。我写了下面的代码,但它正在从 FINAL_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)
推荐阅读
- powershell - 每次运行程序时添加+1?
- terraform-provider-aws - AWS 的 Terraform 提供程序:为假设角色刷新令牌
- python - 将 csv 作为队列导入,然后追加/删除第一项
- laravel - 自动在我的 Laravel 应用中添加版本
- python-3.x - Django 搜索特定记录
- python - 如何使用 LSTM 改进我的船舶轨迹预测程序?
- angular - 为什么 Angular 10 中出现错误“无法设置未定义的属性...”?
- android - 向不请求的 Android 应用授予“设备管理员”权限
- audio - 减少 MPEG2/H.264 视频和 MPEG1/AC3 音频编码流之间的 PTS 差距
- ruby-on-rails - 是否需要重命名 environment.sample 文件才能使用环境挂钩?