SQL查询根据行值计算标志

时间:2016-07-29 08:55:14

标签: sql oracle oracle11g

TableA是具有1000行的超集,而TableB是具有500行的子集。两个表的结构与ID和Empno相同。写一个应该得到的SQL查询ID,Empno,flag(Y / N)如果表B中的行已经出现在TableA中,则显示Y其他标志显示N

表A

 id emp
 1  a
 2  b
 3  c
 4  d

表B

id empno 
1  a
2  b
3  f
4  g

结果集

id empno flag
1  a      Y
2  b      Y
3  f      N
4  g      N
select id, empno , ?case statement on id in table b as flag ??
from table b

1 个答案:

答案 0 :(得分:0)

使用外部联接和检查NULL

select a.id, a.empno, 
       case when b.id is null then 'N' else 'Y' end as flag
from table_a a
   left join table_b b on a.empno = b.empno;

如果table_b中存在table_a,则上面将显示你的每一行。

如果您想要查看table_b中的行,您可以使用以下内容:

select id, empno, 
       case 
          when (select count(*) from table_a a where a.empno = b.empno) = 1 
               then 'Y' 
          else 'N'
       end
from table_b b