table: a  fields : id ,pl_cd,price,qty 
table: b  fields : id ,pl_cd,price,qty data 
a.id pl_cd   price   qty 
   1   ab    1.00    100
   2   ac    2.00    200
   3   ad    3.00    300b.id pl_cd   price   qty 
   1   ab    1.00    100    
   3   ad    3.00    300
   4   hh    4.00    400
   5   ww    5.00    500
想要的结果是 
  id pl_cd   price   qty    id pl_cd   price   qty    Match
   1   ab    1.00    100    1   ab    1.00    100     Y
   2   ac    2.00    200                              N
   3   ad    3.00    300    3   ad    3.00    300     Y   
                            4   hh    4.00    400     N
                            5   ww    5.00    500     N
   请教 如何写这个比较的sql ? 
     条件: 1. 如果 a 或者 b 对应的数据没有,那match 都为N
     2. 如果a.price <> b.price 或者是 a.qty<> b.qty 或 a.pl_cd<>b.pl_cd 或 a.id<>b.id 
              则match 也是N 
           3. 这个表是没有键关系的, 只是想对比一下这两个表的数据,有什么思路呢?
              两个表同时order by id, pl_cd, price,qty? 然后怎么对比? 
   
 

解决方案 »

  1.   


    with a as(
    select 1 id,'ab' pl_cd,1.00 price,100 qty from dual union all
    select 2, 'ac', 2.00, 200 from dual union all
    select 3, 'ad', 3.00, 300 from dual),
    b as(
    select 1 id,'ab' pl_cd,1.00 price,100 qty from dual union all
    select 3, 'ad', 3.00, 300 from dual union all
    select 4, 'hh', 4.00, 400 from dual union all
    select 5, 'ww', 5.00, 500 from dual)
    select a.*,b.*,
    (case when a.id=b.id and a.pl_cd=b.pl_cd and a.price=b.price and a.qty=b.qty
          then 'Y'
          else 'N' end)
    from a full join b on a.id=b.id
            ID PL      PRICE        QTY         ID PL      PRICE        QTY (
    ---------- -- ---------- ---------- ---------- -- ---------- ---------- -
             1 ab          1        100          1 ab          1        100 Y
             3 ad          3        300          3 ad          3        300 Y
             2 ac          2        200                                     N
                                                 5 ww          5        500 N
                                                 4 hh          4        400 N