17,086
社区成员
发帖
与我相关
我的任务
分享
select * from t where c=(case when (select count(*) from t where c='c2')>0 then 'c2' else 'c1' end);
SQL> select * from test;
USERNAME USERNUM
-------------------- ---------------------------------------
c1
c2
1
SQL> select decode(username,null,'c1','c2','c2','c1','c1'),usernum from test;
DECODE(USERNAME,NULL,'C1','C2' USERNUM
------------------------------ ---------------------------------------
c1
c2
c1 1
select decode(c2,null,c1,c2) from t
[/quote]c1和c2是值,不是字段名[/quote]
c2行和C1行如何理解,举出数据和你想要的结果[/quote]
举例:我想要select * from a where c=c2 or c=c1 ,如果c=c2成立,就不要再执行后边的 or c=c1了(实际上这是不可能的,or c=c1还会继续执行的),怎么写能实现类似的效果?[/quote]
select * from a where (c=c2 or c=c1 )
就这样就行了,当判断OR(或)的表达式的时候,如果第一个表达式就不会再执行第二个表达式了[/quote]好像不是这样啊。。。试了,感觉跟不加括号一样select decode(c2,null,c1,c2) from t
[/quote]c1和c2是值,不是字段名[/quote]
c2行和C1行如何理解,举出数据和你想要的结果[/quote]
举例:我想要select * from a where c=c2 or c=c1 ,如果c=c2成立,就不要再执行后边的 or c=c1了(实际上这是不可能的,or c=c1还会继续执行的),怎么写能实现类似的效果?[/quote]
select * from a where (c=c2 or c=c1 )
就这样就行了,当判断OR(或)的表达式的时候,如果第一个表达式就不会再执行第二个表达式了select decode(c2,null,c1,c2) from t
[/quote]c1和c2是值,不是字段名[/quote]
c2行和C1行如何理解,举出数据和你想要的结果[/quote]
举例:我想要select * from a where c=c2 or c=c1 ,如果c=c2成立,就不要再执行后边的 or c=c1了(实际上这是不可能的,or c=c1还会继续执行的),怎么写能实现类似的效果?select decode(c2,null,c1,c2) from t
[/quote]c1和c2是值,不是字段名[/quote]
c2行和C1行如何理解,举出数据和你想要的结果select decode(c2,null,c1,c2) from t
[/quote]c1和c2是值,不是字段名select decode(c2,null,c1,c2) from t