oraclesql查询中的条件

oraclesql查询中的条件,sql,oracle,Sql,Oracle,我有一个类似的问题 select * from emp where emp.id in(1,2,3) and emp.sal>10000 我需要在检查emp.sal>10000时添加一个逻辑,仅当design.type='Labor'时,我尝试了以下方法,但没有成功 select * from emp,design where emp.id in(1,2,3) and case when design.type='Labor' then emp.sal>10000 我们能实现

我有一个类似的问题

 select * from emp where emp.id in(1,2,3) and emp.sal>10000
我需要在检查emp.sal>10000时添加一个逻辑,仅当design.type='Labor'时,我尝试了以下方法,但没有成功

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

我们能实现这个吗?

这应该适合您

SELECT * FROM emp 
WHERE emp.id IN (1,2,3) 
   AND ((design.type = 'Labor' AND emp.sal>10000) 
        OR (design.type <> 'Labor'))
从emp中选择*
其中emp.id在(1,2,3)中
和((design.type=‘人工’和emp.sal>10000)
或(design.type“人工”)
或条件的简化为

SELECT * FROM emp 
WHERE emp.id IN (1,2,3) 
   AND (design.type <> 'Labor' OR emp.sal > 10000)
从emp中选择*
其中emp.id在(1,2,3)中
和(设计类型“人工”或emp.sal>10000)
简单:

select * from emp where emp.id in(1,2,3) and (design.type<>'Labor' OR emp.sal>10000)
从emp中选择*,其中emp.id在(1,2,3)和(设计类型“人工”或emp.sal>10000)

如果design.type='labour',则emp.sal必须大于10000,条件才能为真。

您希望仅当类型为
labour
时查询工资高于10000的行。为了完成起见,我们还将声明,对于不同的
类型
我们不关心工资。如果我们正式提出,我们将得到:

(type = 'Labor' and salary > 10000) OR (type != 'Labor')
这个布尔表达式当然可以简化-我们正在寻找类型不同于
人工
或工资高于10000的行:

(salary > 10000) OR (type != 'Labor')
因此,如果我们把所有这些放在一起:

SELECT *
FROM   emp 
WHERE  (emp.id IN (1,2,3)) AND (type != 'Labor' OR sal > 10000)
  Try this.
  select * from 
  (
    select * from emp where id in (1,2,3) and design.type='Labor'
  )a
  where a.sal>10000;