日期:2014-05-17  浏览次数:21314 次

oracle中如何比较2个集合是否相等?
如题:在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 count(*) from (
(select * from table_a where 条件 order by 排序字段)
  minus
(select * table_b where 条件 order by 排序字段)
);
--结果为0说明相等

------其他解决方案--------------------
1-2=0 and 2-1=0
两次的结果都是0就是相等。
------其他解决方案--------------------
可以考虑通过wm_concat把两边的结果集中起来,再拿两边的结果做比对看是否相同
------其他解决方案--------------------
判断两个集合是否相同
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运算:  
返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。
比如第一个结果是第二个结果的子集,那返回的结果是0 
和我需要的是不一样的,我要的是个数,值,顺序(通过order by实现)均一样才相等



A minus B union all B minus A
这样
------其他解决方案--------------------
上面的有点点问题呢。
minus运算:  
返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。
比如第一个结果是第二个结果的子集,那返回的结果是0 
和我需要的是不一样的,我要的是个数,值,顺序(通过order by实现)均一样才相等
------其他解决方案--------------------
引用:
上面的有点点问题呢。
minus运算:  
返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。
比如第一个结果是第二个结果的子集,那返回的结果是0 
和我需要的是不一样的,我要的是个数,值,顺序(通过order by实现)均一样才相等


A minus B unino all B minus A
------其他解决方案--------------------
引用:
1-2=0 and 2-1=0
两次的结果都是0就是相等。


呵呵,你对minus运算:   
返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。
的理解有误区。请仔细看上面的描述。我已经用实际数据验证了上面的正确性