Sql 关键词
如果EXISTS关键字的计算结果仅为True或False,为什么下面的查询会返回具有匹配id的所有指定列,而不是所有指定列Sql 关键词,sql,exists,Sql,Exists,如果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 FRO
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);
第一个代码将从employees中选择id为Retires的所有行。过滤器会自动关闭 如果您想查看哪些记录不在退休人员表中,您应该添加
not
就像这样:
SELECT first_name,
last_name
FROM employees
WHERE NOT EXISTS (
SELECT id
FROM retirees
WHERE id = employees.id);
第一个代码将从employees中选择id为Retires的所有行。过滤器会自动关闭 如果您想查看哪些记录不在退休人员表中,您应该添加
not
就像这样:
SELECT first_name,
last_name
FROM employees
WHERE NOT EXISTS (
SELECT id
FROM retirees
WHERE id = employees.id);
您使用
的方式存在于相关子查询中。exists的功能不会结束,而是可以追溯到每次运行时,所有员工id都与retires表匹配。因此,您将获得o/p作为与退休人员匹配的所有员工ID 您使用的方式存在于相关子查询中。exists的功能不会结束,而是可以追溯到每次运行时,所有员工id都与retires表匹配。因此,您将获得o/p作为与退休人员匹配的所有员工ID EXISTS
并不像第二个示例中那样简单地返回TRUE
。它将返回的员工
限制为id与退休人员
条目匹配的员工。换句话说,它返回所有员工,其中退休人员中存在匹配条目。这与中的TRUE不同
尽管EXISTS
具有布尔属性,但本例中对TRUE或FALSE的求值确定是否应在结果中包含employees
条目。WHERE TRUE
表单将导致employees表的所有行返回,这肯定不是EXISTS
所做的,您可能从查询结果中看到了这一点
根据EXISTS
条件,您可以将EXISTS
视为一个匹配原始数据集子集的子句。EXISTS
并不像第二个示例中那样简单地返回TRUE
。它将返回的员工
限制为id与退休人员
条目匹配的员工。换句话说,它返回所有员工,其中退休人员中存在匹配条目。这与中的TRUE不同
尽管EXISTS
具有布尔属性,但本例中对TRUE或FALSE的求值确定是否应在结果中包含employees
条目。WHERE TRUE
表单将导致employees表的所有行返回,这肯定不是EXISTS
所做的,您可能从查询结果中看到了这一点
根据EXISTS
条件,您可以将EXISTS
视为一个匹配原始数据集子集的子句。退休人员是否有id
列?如果没有,您就犯了一个典型的错误(因为当子查询不合格时,它可以从外部查询愉快地引用id
)。如果这不是问题所在,您可能需要用示例数据、预期结果等进一步解释EXISTS
并不像第二个示例中那样简单地返回TRUE
。它将返回的员工限制为id与退休人员条目匹配的员工。换句话说,它返回所有员工,其中退休人员中存在匹配条目。这与中的TRUE不同
谢谢h0r53。它的声明式风格有时让我感到困惑。退休人员是否有id
列?如果没有,您就犯了一个典型的错误(因为当子查询不合格时,它可以从外部查询愉快地引用id
)。如果这不是问题所在,您可能需要用示例数据、预期结果等进一步解释EXISTS
并不像第二个示例中那样简单地返回TRUE
。它将返回的员工限制为id与退休人员条目匹配的员工。换句话说,它返回所有员工,其中退休人员中存在匹配条目。这与中的TRUE不同
谢谢h0r53。它的陈述式风格有时让我感到困惑。