我有两张表 test1 和 test2 。
在test1
中,有一些名为rec_id
和deptno
的列。 deptno
的值为10,20,30,40....
在test2
表中,列rec_id
和deptno
也可用。
我需要deptno
30
的条件输出,具体取决于test2
表中此值的可用性。
rec_id deptno decoded value condition
1 10 a NA
2 20 b NA
3 30 c or discard
如果rec_id
= 3
且deptno
= 30
在test2
表中可用,则丢弃,否则C
:
4 40 d NA
5 50 f NA
我不想为此问题创建任何函数,因为它在sql和pl / sql引擎之间进行上下文切换并影响性能。
请使用简单的sql.many感谢让我知道更好的方法!
我使用过像这样的解码:
select decode(test1.deptno,
10, 'a',
20, 'b',
30, 'required ur help',
40, 'd',
50, 'e') from test1;
答案 0 :(得分:1)
如果您想要返回不同的值,那么您就是这样做的。
select decode(test1.deptno,
10, 'a',
20, 'b',
30, decode((select count(*)
from test2 b
where b.rec_id=3
and b.deptno = 30)
,0,'c'
,'discard')
40, 'd',
50,'e') from test1 a;
如果通过“丢弃”表示“不返回此行”,那么您只需使用NOT EXISTS
select decode(test1.deptno,
10, 'a',
20, 'b',
30, 'c',
40, 'd',
50,'e') from test1 a
where not exists (select 1
from test2 b
where b.rec_id = 3
and b.deptno = 30
and b.rec_id = a.rec_id
and b.deptno = a.deptno);