暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何识别左联接中的空列与空行

askTom 2017-08-04
482

问题描述

嗨,克里斯/康纳,

我有一个下面的查询输出:
select tab1.usr, tab2.salary 
from tab1
LEFT JOIN tab2 ON (tab1.usr = tab2.usr and tab1.name = tab2.name);

USR   salary
-----   -------
1111  5001
2222  NULL
3333  NULL

Since usr: 2222 not exists in tab2 I am trying to get the output like below:
USR   salary
-----   -------
1111  5001
2222  NULL
3333  'NOT FOUND'


您能否帮助修改我上面的查询以实现此目的。


专家解答

所以你想知道你是否加入了一行,但是当外部联接表中没有匹配的行时,该列是空的?

如果是这样,请检查联接列的值。如果这不是null,则显示该列。否则返回

您可以在案例表达式或解码中执行此操作:

create table tab1 
( 
usr number, 
name varchar2(10) 
);

create table tab2 
( 
usr number, 
name varchar2(10), 
salary number 
);

insert into tab1 
values (1111, 'Jerry');

insert into tab1 
values (2222, 'John');

insert into tab1 
values (3333, 'Scott');

insert into tab2 
values (1111, 'Jerry', 5001);

insert into tab2 
values (3333, 'Jerry', NULL);

commit;

select tab1.usr, tab2.usr ,
       case
         when tab2.usr is not null then 
           to_char(tab2.salary)
         else
           'NOT FOUND'
       end case_sal,
       decode( tab2.usr , null , 'NOT FOUND', to_char(tab2.salary) ) dec_sal
from   tab1
left join tab2 
on     tab1.usr = tab2.usr;

USR   USR   CASE_SAL   DEC_SAL    
1111  1111  5001       5001       
3333  3333                        
2222        NOT FOUND  NOT FOUND  


(3333的名称不匹配,我猜您应该是相同的,或者您只是想加入usr...)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论