【问题标题】:Getting an error using EXISTS operator but correct result with IN operator in使用 EXISTS 运算符出现错误,但使用 IN 运算符得到正确结果
【发布时间】:2021-10-12 18:39:43
【问题描述】:

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

下面是enter image description hereboth查询

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)

【问题讨论】:

  • 你没有显示为什么你试图让部门参与你的查询;你能解释一下你真正想要达到的目标吗?

标签: mysql sql syntax-error exists


【解决方案1】:

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

WHERE EXISTS (subquery...)

不是

WHERE somefield EXISTS (subquery...)

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

EXISTS (SELECT 1 FROM ...)

虽然选择 null 或任何其他值或多个值的效果相同。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我找到了解决方案。

      现在,我知道 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
      

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 1970-01-01
        • 2014-06-06
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        • 2017-12-26
        • 1970-01-01
        相关资源
        最近更新 更多