首页 > 解决方案 > SQL AND OR 运算符

问题描述

为什么下面的查询只带来deptno = 10
为什么不带行job IN ('MANAGER','SALESMAN') and deptno = 30结果?

select * 
from emp 
where deptno=10 
  and ((job IN ('MANAGER','SALESMAN') and deptno = 30) or (1=1));

标签: sqlboolean-expression

解决方案


(1=1)总是TRUE
因此,任何与该条件相结合的条件/布尔表达式OR,例如:

(job IN ('MANAGER','SALESMAN') and deptno = 30) or (1=1)

也将永远TRUE
这使您的WHERE子句等效于:

where deptno=10 and TRUE

更简单:

where deptno=10

如果您想要表deptno=10的行和deptno=30仅当的行,job IN ('MANAGER','SALESMAN')那么您应该具有:

where deptno=10 or ((job IN ('MANAGER','SALESMAN') and deptno = 30) 

推荐阅读