存在运算符如何工作?我不知道为什么结果会发生
How does exists operator work? I don't know why the result happens
我认为下面的SQL语句returns列出的工资低于5000。
但是拿到了大于等于5000的工资,真不知道为什么。我错过了什么吗?
select salary
from employees
where exists (select 1 from employees e where salary < 5000);
exists
运算符内的查询在您的查询 returns 中至少有一行,因此该运算符的计算结果为 true
。这里的问题是它与外部查询没有任何关联,因此它 returns 外部查询中每一行的结果相同(即总是 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
我认为下面的SQL语句returns列出的工资低于5000。 但是拿到了大于等于5000的工资,真不知道为什么。我错过了什么吗?
select salary
from employees
where exists (select 1 from employees e where salary < 5000);
exists
运算符内的查询在您的查询 returns 中至少有一行,因此该运算符的计算结果为 true
。这里的问题是它与外部查询没有任何关联,因此它 returns 外部查询中每一行的结果相同(即总是 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