oracle sql查询中的条件

时间:2014-03-21 16:54:15

标签: sql oracle

我有一个像

这样的查询
 select * from emp where emp.id in(1,2,3) and emp.sal>10000

我需要在check.etype =' Labor'中添加一个逻辑到check emp.sal> 10000,我尝试过如下但不能正常工作

select * from emp,design where emp.id in(1,2,3) and case when design.type='Labor' then emp.sal>10000 

我们可以实现吗?

4 个答案:

答案 0 :(得分:1)

简单:

select * from emp where emp.id in(1,2,3) and (design.type<>'Labor' OR emp.sal>10000)

如果design.type ='Labor',则emp.sal必须大于10000才能使条件成立。

答案 1 :(得分:0)

这对你有用......

SELECT * FROM emp 
WHERE emp.id IN (1,2,3) 
   AND ((design.type = 'Labor' AND emp.sal>10000) 
        OR (design.type <> 'Labor'))

OR条件的简化将是......

SELECT * FROM emp 
WHERE emp.id IN (1,2,3) 
   AND (design.type <> 'Labor' OR emp.sal > 10000)

答案 2 :(得分:0)

您希望仅在类型为labor的情况下查询薪水高于10000的行才能完成,我们还要说明,对于不同的type,我们不会#39关心工资。如果我们正式提出这个问题,我们就会得到:

(type = 'Labor' and salary > 10000) OR (type != 'Labor')

这个布尔表达式当然可以简化 - 我们正在寻找类型不同于Labor或薪水高于10000的行:

(salary > 10000) OR (type != 'Labor')

所以如果我们把它们放在一起:

SELECT *
FROM   emp 
WHERE  (emp.id IN (1,2,3)) AND (type != 'Labor' OR sal > 10000)

答案 3 :(得分:0)

  Try this.
  select * from 
  (
    select * from emp where id in (1,2,3) and design.type='Labor'
  )a
  where a.sal>10000;