oracle对两组数据求差集、并集、交集

1. SQL 

-- 简单交、并、差集只需要使用intersect、union、minus关键字即可
-- 这里是对用户给予的两个数组(比如excel里的某两列)结合使用oracle的伪列去做交、并、差集运算
-- 实际情况对于比较两个数组有更多选择,这里仅展示oracle sql方式(当然这里使用oracle有些笨,但是某些场景下还是可以使用的,比如excle里某列和db里某列数据的比较)
with t_origin as (select 1000 || ',' ||
                         2000 || ',' ||
                         3000 || ',' ||
                         4000 || ',' ||
                         5000 || ',' ||
                         6000 numbers
                  from dual),
     t_origin_ as (select regexp_substr(t.numbers, '[^,]+', 1, levels.column_value) as numbers
                   from t_origin t,
                        table (cast(multiset(select level from dual connect by level <= length(regexp_replace(t.numbers, '[^,]+')) + 1) as
                                    sys.OdciNumberList)) levels),
     t_target as (select 1000 || ',' ||
                         2000 || ',' ||
                         3000 || ',' ||
                         4000 numbers
                  from dual),
     t_target_ as (select regexp_substr(t.numbers, '[^,]+', 1, levels.column_value) as numbers
                   from t_target t,
                        table (cast(multiset(select level from dual connect by level <= length(regexp_replace(t.numbers, '[^,]+')) + 1) as
                                    sys.OdciNumberList)) levels)
select numbers||'-'||'minus' from (select numbers from t_origin_ minus select numbers from t_target_) union all
select numbers||'-'||'union' from (select numbers from t_origin_ union select numbers from t_target_) union all
select numbers||'-'||'intersect' from (select numbers from t_origin_ intersect select numbers from t_target_);

 

2. SQL Output

5000-minus
6000-minus
1000-union
2000-union
3000-union
4000-union
5000-union
6000-union
1000-intersect
2000-intersect
3000-intersect
4000-intersect

 

3. Excel数据处理

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值