我有两个表,暂时为A,B表,想做一个关联,
需求如下:
两表关联生成新表C表,C表除了A,B所有的字段外,
还要加上一个标志字段,
标志字段的内容为:
-1:A表里没有匹配上的
0:    正常匹配的
1:    B表里没有匹配上的。如:
A(a,b)
1 2
2 3
3 4B(a,b)
1 2
4 5按a字段进行关联,则C表为:
a b a b c
1 2 1 2 0
2 3     -1
3 4     -1
    4 5 1
其中,c字段为标志位

解决方案 »

  1.   


    WITH a AS(
    SELECT 1 a,2 b FROM dual UNION ALL  
    SELECT 2,3 FROM dual UNION ALL  
    SELECT 3,4 FROM dual 
    ),
    B AS(
    SELECT 1 a,2 b FROM dual UNION ALL  
    SELECT 4,5 FROM dual
    )
    SELECT a.*,b.*,
    CASE 
        WHEN a.a=b.a AND a.b=b.b THEN 0
        WHEN a.a IS NULL THEN 1
        ELSE -1
    END c 
    FROM a full join b
    ON a.a=b.a AND a.b=b.b A   B   A   B   C
    ------------------
    1   2   1   2   0
    3   4          -1
    2   3          -1
            4   5   1
      

  2.   


    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
    Connected as scott
    SQL> 
    SQL> with A as (select 1 a,   2 b from dual union all
      2  select 2 ,  3  from dual union all
      3  select 3 ,  4  from dual),
      4  B as
      5  (
      6  select 1 a ,  2  b from dual union all
      7  select 4,   5 from dual
      8  )
      9  select A.*,b.*,decode(a.a,b.a,0,null,1,-1) end from A full join B on A.a=B.a and a.b= b.b
     10  /         A          B          A          B        END
    ---------- ---------- ---------- ---------- ----------
             1          2          1          2          0
             3          4                               -1
             2          3                               -1
                                   4          5          1SQL>