现有两个表A,B,结构如下
A  recordID 记录编号,memberID 会员卡号,approveCode 交易授权号 ,org 起始地,dest 目的地,redeemType 奖励类型
B  recordID 记录编号, memberID 会员卡号,approveCode 交易授权号,applier 申请人,auditi 审核人现在两个表中的memberID 和 approveCode 是相等的也就是说a.memberID =b.memberID ,a.approveCode =b.approveCode 我的sql是这样的:select a.memberID ,a.approveCode ,a.org,a.dest,a.redeemType ,b.applier ,b.auditi  from a,b
       where a.memberID=b.memberID 
       and a.approveCode=b.approveCode现在两表各有两条记录,两条记录对应的memberID 和 approveCode 是相等的, 我应该是查出两条记录才对,我查出的是四条记录,其中有两条都是完全相同的。
我怎样得到我想要的字段而避免重复?

解决方案 »

  1.   

    两边关联那就是2×2=4你把其中完全相同的一边,group by 一下
      

  2.   

    select distinct a.memberID ,a.approveCode ,a.org,a.dest,a.redeemType ,b.applier ,b.auditi  from a,b 
          where a.memberID=b.memberID 
          and a.approveCode=b.approveCode; 
      

  3.   

    看来 recordID 记录编号,memberID 会员卡号不是主键,是否主键还包含其它字段?
      

  4.   

    两个表各自的主键都是recordID,该字段没有关联,当初设计这个表的时候没有设计关联自段
      

  5.   

    select distinct a.memberID ,a.approveCode ,a.org,a.dest,a.redeemType ,b.applier ,b.auditi  from a,b 
          where a.memberID=b.memberID 
          and a.approveCode=b.approveCode; 
      

  6.   


    看来你的a表的两条记录memberID approveCode 也是相等的,b表应该也一样select * from 
    (select  a1.*,row_number() over (aprtition by a1.memberID,a1.approveCode   order by a1.memberID,a1.approveCode from a a1) r ) a,
    (select  b1.*,row_number() over (aprtition by b1.memberID,b1.approveCode   order by b1.memberID,b1.approveCode from b b1) r ) b
    where a.memberID=b.memberID
          and a.approveCode=b.approveCode
    and a.r = b.r
      

  7.   


    只有这样了,虽然不是很可靠
    问题是,两表各有2条记录的memberid和approvecode重复,那你如何确认两表之间的连接关系
      

  8.   

    用inner join 不行吗?select a.memberID ,a.approveCode ,a.org,a.dest,a.redeemType ,b.applier ,b.auditi
    from a
    inner join b
    on a.memberID = b.memberID 
    and a.approveCode =b.approveCode 
    eg.create table test_a(id_1 number(2),id_2 number(2),username varchar(10));create table test_b(id_1 number(2),id_2 number(2),username varchar(10));insert into test_a
    select 1,1,'aaa' from dual
    union all
    select 2,2,'bbb' from dual
    union all
    select 3,3,'ccc' from dual;insert into test_b
    select 1,1,'aaa' from dual
    union all
    select 2,2,'bbb' from dual
    union all
    select 3,3,'ccc' from dual;select*from test_a inner join test_b on test_a.id_1=test_b.id_1 and test_a.id_2=test_b.id_2;
      

  9.   

    看来只用memberID 会员卡号,approveCode 交易授权号无法关联到唯一的记录。
    应该还有条件做限制才行。
    能否给出你的测试数据和你想要的结果呢?btw:如果你查出的4条记录是两两重复的,那么a表或b表的两条记录可能本身就是重复的。