如题:在oracle中如何比较2个集合相等。比如:select * from table_a where 条件 比如结果是{1,2,3,4,5}
select * from table_b where 条件 比如结果是{1,2,3,4,5}备注:得到的结果可能不一样,个数也可能不一样。只有顺序和个数及值都一样的时候才是相等的。问题:1。首先我要怎么定义集合,把上面的结果存放起来?
2。存放好后,直接 = 或 != 比较?请会的人指导。谢谢。没什么分了,多多包涵吧。
select * from table_b where 条件 比如结果是{1,2,3,4,5}备注:得到的结果可能不一样,个数也可能不一样。只有顺序和个数及值都一样的时候才是相等的。问题:1。首先我要怎么定义集合,把上面的结果存放起来?
2。存放好后,直接 = 或 != 比较?请会的人指导。谢谢。没什么分了,多多包涵吧。
select count(*) from (
(select * from table_a where 条件 order by 排序字段)
minus
(select * table_b where 条件 order by 排序字段)
);
--结果为0说明相等
minus运算:
返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。
比如第一个结果是第二个结果的子集,那返回的结果是0
和我需要的是不一样的,我要的是个数,值,顺序(通过order by实现)均一样才相等
两次的结果都是0就是相等。
A minus B unino all B minus A
这样
declare
type my is table of varchar2(10);
va1 my := my('a', 'b', 'c');
va2 my := my('a', 'b', 'c');
begin
if va1 = va2
then
dbms_output.put_line('相同');
else
dbms_output.put_line('no相同');
end if;
end;
呵呵,你对minus运算:
返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。
的理解有误区。请仔细看上面的描述。我已经用实际数据验证了上面的正确性