sql 集合相减的问题
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/16 11:21:10
sql 集合相减的问题
假设有
表1 { 1,1,1,2,2,3 }
表2 {1,2,3}
请问如何实现两者相减得到结果{1,1,2}.求各路高手提供最简便方法.
其实就是有一个任务总表,里面有重复记录,有一个已完成的部分表,想筛掉已处理的部分,苦无良策.
ps.已试过用minus,无用,表1 minus 表2 结果为空.
对所举例子表格说明:两个表均只有一个字段,number型,表1有6条记录,表二有3条记录,数据库为oracle 9i.
实际需处理的数据更繁琐,表结构更复杂,但是与所举这个简化的例子本质一样:两个表结构一样,表一为总表且存在重复记录,表二为总表中的部分记录也可能存在重复记录,现在想得到不在表二中的部分.
假设有
表1 { 1,1,1,2,2,3 }
表2 {1,2,3}
请问如何实现两者相减得到结果{1,1,2}.求各路高手提供最简便方法.
其实就是有一个任务总表,里面有重复记录,有一个已完成的部分表,想筛掉已处理的部分,苦无良策.
ps.已试过用minus,无用,表1 minus 表2 结果为空.
对所举例子表格说明:两个表均只有一个字段,number型,表1有6条记录,表二有3条记录,数据库为oracle 9i.
实际需处理的数据更繁琐,表结构更复杂,但是与所举这个简化的例子本质一样:两个表结构一样,表一为总表且存在重复记录,表二为总表中的部分记录也可能存在重复记录,现在想得到不在表二中的部分.
这个简单,参照代码
select id from
(select id,
row_number()over(partition by id order by id ) sn
from tab_a
)where (id,sn) not in(
select id, row_number()over(partition by id order by id ) sn
from tab_b
)
select id from
(select id,
row_number()over(partition by id order by id ) sn
from tab_a
)where (id,sn) not in(
select id, row_number()over(partition by id order by id ) sn
from tab_b
)