本人在做一个动态条件的查询,根据前面一个条件是否成立而决定下一个条件,
下面是一个例子
偶用的测试表是Oracle自带的emp表查询是否有ename='SCOTT'条件的记录,
若有则条件为ename='SCOTT',
否则条件为ename='SCOTT' or ename='SMITH'
下面的SQL语句可以正常运行,查询结果为ename='SCOTT' or ename='SMITH'
select decode((select count(ename) from scott.emp where ename='SCOTT'), 0, 'ename=' || '''SCOTT''', 'ename=' || '''SCOTT''' || ' or ename=' || '''SMITH''')
from dual 但是我用下面的SQL查询,即在查询emp表的同时用decode把条件放在后面却不行
select * from scott.emp
where decode((select count(ename) from scott.emp where ename='SCOTT'), 0, 'ename=' || '''SCOTT''', 'ename=' || '''SCOTT''' || ' or ename=' || '''SMITH''')
提示“无效的关系运算符”,不知道是什么原因
FROM scott.emp
WHERE ((SELECT COUNT(*) FROM scott.emp WHERE ename='SCOTT')>0 AND ename='SCOTT')
OR ((SELECT COUNT(*) FROM scott.emp WHERE ename='SCOTT')=0 AND (ename='SCOTT' OR ename='SMITH'))
都提示“无效的关系运算符”,不管你怎么绕最后必须得回到true,false上.
用动态sql
where ename=decode((select count(ename) from scott.emp where ename='SCOTT'), 0, ''SMITH'', ''SCOTT'')