gpt4 book ai didi

sql - 在 ORACLE 上使用递归 CTE 创建多列过滤

转载 作者:行者123 更新时间:2023-12-02 03:37:11 24 4
gpt4 key购买 nike

我目前正在使用 VBA 函数遍历 Oracle 结果集以消除多个列/字段上的重复项(即每列中只有不同的值)例如:

我的结果集按 RECORD_ID 排序,我想消除 FIELD_1 和 FIELD_2 重复:

RECORD_ID   FIELD_1     FIELD_D
1 A i
2 A j
3 B i
4 B k
5 C j
6 C k
7 D k

所以我的程序创建了一个新表(比如 FINAL_TABLE)并评估原始 sql 结果集中的每一行(比如 TABLE_1):

IF TALBE_1.FIELD_1 的当前值不是在 FINAL_TABLE.FIELD_1 AND TALBE_1.FIELD_2 的当前值是NOT 在 FINAL_TABLE.FIELD_2 THEN 将记录/行插入 FINAL_TABLE

这导致

Column 1    Column 2    Column 3
1 A i
4 B k
5 C j

第 2 列和第 3 列都只有唯一值。

我曾尝试研究一种使用 LAG 和 PATTERN MATCHING 函数从循环转移到 SQL 的方法,但无法弄清楚。 (想不出使用不同的方法)

我也研究过创建可能组合表然后从中选择的方法,但这是不可行的,因为只有几千行数据会使组合数量太大,大多数计算机无法处理。

底线:能否通过递归 SQL 查询实现此逻辑?

最佳答案

如果您将结果集存储在一个临时表中,那么我认为您可以使用delete 来做到这一点:

delete from temp
where exists (select 1
from temp t2
where t2.id < temp.id and (t2.col2 = temp.col2 or t2.col3 = temp.col3)
);

关于sql - 在 ORACLE 上使用递归 CTE 创建多列过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22683883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com