【发布时间】:2019-12-04 17:54:50
【问题描述】:
如果 EXISTS 关键字仅计算为 True 或 False,为什么下面的查询会返回所有具有匹配 id 的指定列而不是所有指定列?
SELECT first_name,
last_name
FROM employees
WHERE EXISTS (
SELECT id
FROM retirees
WHERE id = employees.id);
因为如果是这种情况,那么不应该将查询评估为:
SELECT first_name,
last_name
FROM employees
WHERE EXISTS (
TRUE);
【问题讨论】:
-
retirees有id列吗?如果不是,那么您就犯了一个典型的错误(因为子查询可以愉快地从外部查询中引用id,当它不合格时)。如果这不是问题,您可能需要解释更多,包括示例数据、预期结果等 -
EXISTS不像第二个示例那样简单地返回TRUE。它将返回的员工限制为具有id匹配retirees条目的员工。换句话说,它返回所有employees,其中retirees中的匹配条目存在。这和WHERE TRUE不一样 -
感谢 h0r53。它的声明式风格有时让我感到困惑。