如题:在oracle中如何比较2个集合相等。比如:select * from table_a where 条件   比如结果是{1,2,3,4,5}
      select *  from  table_b where 条件   比如结果是{1,2,3,4,5}备注:得到的结果可能不一样,个数也可能不一样。只有顺序和个数及值都一样的时候才是相等的。问题:1。首先我要怎么定义集合,把上面的结果存放起来?
2。存放好后,直接 = 或 != 比较?请会的人指导。谢谢。没什么分了,多多包涵吧。

解决方案 »

  1.   


    select count(*) from (
    (select * from table_a where 条件 order by 排序字段)
      minus
    (select * table_b where 条件 order by 排序字段)
    );
    --结果为0说明相等
      

  2.   

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

  3.   

    1-2=0 and 2-1=0
    两次的结果都是0就是相等。
      

  4.   


    A minus B unino all B minus A
      

  5.   

    A minus B union all B minus A
    这样
      

  6.   

    判断两个集合是否相同
    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;
      

  7.   

    可以考虑通过wm_concat把两边的结果集中起来,再拿两边的结果做比对看是否相同
      

  8.   


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