我有两个表,暂时为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字段为标志位
需求如下:
两表关联生成新表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字段为标志位
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
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>