存在的操作员如何工作?我不知道为什么会这样

问题描述

我认为以下SQL语句返回的列表薪水少于5000。 但是我的薪水大于或等于5000。我真的不知道为什么。我错过了什么吗?

select salary 
from employees 
where exists (select 1 from employees e where salary < 5000);

解决方法

查询中exists运算符内的查询至少返回一行,因此该运算符的计算结果为true。这里的问题是它与外部查询没有任何关联,因此它为外部查询中的每一行返回相同的结果(即始终为true)。

要获得所需的结果,您需要通过在内部查询的where子句中使用来自外部查询的术语来使查询之间相互关联:

SELECT salary
FROM   employees e1
WHERE  EXISTS (SELECT 1
               FROM   employees e2 
               WHERE  e1.emp_id = e2.emp_id AND salary < 5000);

但是,说实话,您实际上不需要这里的exists运算符,并且可以直接查询薪水:

SELECT salary
FROM   employees
WHERE  salary < 5000

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...