使用 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
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