在线等...where中的case when .. 求高手..急

izj 2013-01-24 10:56:34




select
*
from
student
where
.....此处有多个检索条件,假设为以下。。
A = A
and B=B
and
-----我想在此处实现,当满足条件年龄!= 1 的时候 添加一个检索条件 username = 'a'



不知各位看懂没有。。

就是当年龄!= 1得时候
检索条件为
A = A
and B=B
and
username = 'a'

就是当年龄= 1得时候
检索条件为
A = A
and B=B


目前这种写法可否????


select
*
from
student
where
A= A
and B=B
and username =
case when age !=1 then 'a'
else username
end



还有一种方法就是写两次条件。。。。这种太麻烦了。。


求高手赐简单写法。。
急急。。。上午12点之前就要。。
...全文
401 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
izj 2013-01-24
  • 打赏
  • 举报
回复
引用 5 楼 shadow1986a 的回复:
我试了下,可以的
那种写法 bug太多了...不安全..
shadow1986a 2013-01-24
  • 打赏
  • 举报
回复
select * from student where A= A and B=B and username = (select case when age !=1 then 'a' else username end from dual ) 改成这样
shadow1986a 2013-01-24
  • 打赏
  • 举报
回复
我试了下,可以的
断剑1989 2013-01-24
  • 打赏
  • 举报
回复
写两次吧,不写两次还真不好实现,你上面贴出的用case的方法好像不行哦
izj 2013-01-24
  • 打赏
  • 举报
回复
引用 2 楼 a504268 的回复:
可不可以试试不就知道了,你这种可以用union的 select * from student p where p.age <> 1 and A = A and B = B and username = 'a' union select * from student q where p.age = 1 and A = A and B ……
这个太麻烦啦...这个跟我说的第二种类似..要写2次
洞穿秋水 2013-01-24
  • 打赏
  • 举报
回复
可不可以试试不就知道了,你这种可以用union的 select * from student p where p.age <> 1 and A = A and B = B and username = 'a' union select * from student q where p.age = 1 and A = A and B = B
izj 2013-01-24
  • 打赏
  • 举报
回复
ajune 2013-01-24
  • 打赏
  • 举报
回复
我是这样写的: SELECT * from student case when age = 1 then A=A and B=B when age <> 1 then A=A and B=B and username = 'a';
izj 2013-01-24
  • 打赏
  • 举报
回复
引用 9 楼 xw5360 的回复:
SQL code ? 12345678 select * from student where A= A and B=B and username = decode(age,1,username,'a')
引用 10 楼 crazy_samba 的回复:
为什么认为这种写法bug太多,不安全呢? 用decode更简洁些 引用 7 楼 New_sara 的回复: 引用 5 楼 shadow1986a 的回复:我试了下,可以的 那种写法 bug太多了...不安全..
age 为空的情况。。。。另外万一,这个student 表和其他表有关联的时候。。都会有问题
crazy_samba 2013-01-24
  • 打赏
  • 举报
回复
为什么认为这种写法bug太多,不安全呢? 用decode更简洁些
引用 7 楼 New_sara 的回复:
引用 5 楼 shadow1986a 的回复:我试了下,可以的 那种写法 bug太多了...不安全..
xw5360 2013-01-24
  • 打赏
  • 举报
回复
select 
 * 
from 
 student 
where 
 A= A 
 and B=B
 and username = decode(age,1,username,'a')
izj 2013-01-24
  • 打赏
  • 举报
回复
怎么木有人...

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧