使用 EXISTS 运算符出错,但使用 IN 运算符得到正确结果

Getting an error using EXISTS operator but correct result with IN operator in

我在使用 EXISTS 时遇到错误 An expression of non-Boolean type specified in a context where a condition is expected 但是当我使用 IN 运算符时它给出了正确的结果。

下面是enter image description here两个查询

SELECT * FROM emp
WHERE Emp_id IN (SELECT Emp_id FROM Department WHERE Department.Emp_id=emp.Emp_id)

SELECT * FROM emp Department
WHERE emp.Emp_id EXISTS (SELECT Emp_id FROM Department WHERE emp.Emp_id=Department.Emp_id)

EXISTS 是一元运算符,而不是二元运算符,并且只接受一个子查询作为其参数。你说:

WHERE EXISTS (subquery...)

没有

WHERE somefield EXISTS (subquery...)

由于 EXISTS 仅测试子查询是否 return 至少一行,因此所选字段不相关,人们通常这样做:

EXISTS (SELECT 1 FROM ...)

尽管选择 null 或任何其他值或多个值的效果是一样的。

EXISTS 运算符只检查是否找到任何结果。它无法将找到的结果与给定的列名称进行绑定和比较,因此无法与此语法一起使用。

我找到了解决方案。

现在,我知道 EXISTS 关键字与 IN 不同,它不比较,但它会检查是否找到任何结果。

现在我可以使用 NESTED SUBQUERY、CORRELATED SUBQUERY 和在任何部门工作的所有员工的 JOIN 获得相同的结果 下面是查询。

SELECT * FROM emp
WHERE Emp_id IN (SELECT Emp_id FROM Department)

SELECT * FROM emp
WHERE EXISTS (SELECT Emp_id FROM Department WHERE emp.Emp_id=Department.Emp_id)

SELECT e.Emp_id, e.E_Name, e.Salary, e.E_Address FROM emp e RIGHT JOIN Department d ON e.Emp_id=d.Emp_id