从2个表中获取特定的输出

时间:2019-05-10 18:01:09

标签: sql oracle oracle11g

我有2张桌子:

tab_1 :

ID      VAL
1       Y
2       N
3       Y

tab_2 :

ID      VAL
2       N
3       X
4       Y

I want to get the final output like 

ID     Operation
1      INSERT
2      EQUAL
3      DIFF
4      DEL

我在联接方面处于非常基础的水平,因此需要一些帮助来解释/理解这种类型的功能。谢谢。

1 个答案:

答案 0 :(得分:2)

您似乎希望在两个表之间进行完全外部联接;然后是一个case表达式,以比较两个表中的val列(它们的存在和值)。也许像这样:

-- CTEs for sample data
with tab_1 (ID, VAL) as (
            select 1, 'Y' from dual
  union all select 2, 'N' from dual
  union all select 3, 'Y' from dual
),
tab_2 (ID, VAL) as (
            select 2, 'N' from dual
  union all select 3, 'X' from dual
  union all select 4, 'Y' from dual
)
-- actual query
select coalesce(t1.id, t2.id) as id,
  case
    when t1.id is null then 'DEL'
    when t2.id is null then 'INSERT'
    when t2.val = t1.val then 'EQUAL'
    else 'DIFF'
  end as operation
from tab_1 t1
full outer join tab_2 t2 on t2.id = t1.id
order by id;

        ID OPERATION
---------- ---------
         1 INSERT   
         2 EQUAL    
         3 DIFF     
         4 DEL